diff --git a/.travis.yml b/.travis.yml
index 09cefa27b3..7474eba31d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
-#pretending we're C because otherwise ruby will initialize, even with "language: dm".
-language: c
+language: generic
+os: linux
+dist: bionic
env:
global:
@@ -12,10 +13,14 @@ cache:
addons:
apt:
packages:
- - libc6-i386
+ - libc6:i386
- libgcc1:i386
- libstdc++6:i386
- - libssl-dev:i386
+ - libssl1.1:i386
+ - g++-7
+ - g++-7-multilib
+ - gcc-multilib
+ - zlib1g:i386
before_install:
- chmod -R +x ./tools/travis
@@ -27,6 +32,7 @@ before_script:
- shopt -s globstar
script:
+ - ldd librust_g.so
- ./tools/travis/compile_and_run.sh
# Build-specific settings
diff --git a/_build_dependencies.sh b/_build_dependencies.sh
index 197fb27bd3..ed9ff6f2eb 100644
--- a/_build_dependencies.sh
+++ b/_build_dependencies.sh
@@ -4,7 +4,7 @@ export SPACEMANDMM_TAG=suite-1.4
# For NanoUI + TGUI
export NODE_VERSION=12
# For the scripts in tools
-export PHP_VERSION=5.6
+export PHP_VERSION=7.2
# Byond Major
export BYOND_MAJOR=513
# Byond Minor
diff --git a/code/__defines/_compile_options.dm b/code/__defines/_compile_options.dm
index b68300eeb2..5ac591042b 100644
--- a/code/__defines/_compile_options.dm
+++ b/code/__defines/_compile_options.dm
@@ -7,10 +7,6 @@
2 for preloading absolutely everything;
*/
-#define RUST_G "rust_g" // If uncommented, we will use the rust-g (https://github.com/tgstation/rust-g) native library for fast
- // logging. This requires you to have the rust_g.dll or rust_g (renamed from librust_g.so) installed in the root folder or BYOND/bin
- // The define's value should be the name of library file.
-
// ZAS Compile Options
//#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile.
#define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support!
diff --git a/code/__defines/dcs/flags.dm b/code/__defines/dcs/flags.dm
new file mode 100644
index 0000000000..128c9f1938
--- /dev/null
+++ b/code/__defines/dcs/flags.dm
@@ -0,0 +1,41 @@
+/// Return this from `/datum/component/Initialize` or `datum/component/OnTransfer` to have the component be deleted if it's applied to an incorrect type.
+/// `parent` must not be modified if this is to be returned.
+/// This will be noted in the runtime logs
+#define COMPONENT_INCOMPATIBLE 1
+/// Returned in PostTransfer to prevent transfer, similar to `COMPONENT_INCOMPATIBLE`
+#define COMPONENT_NOTRANSFER 2
+
+/// Return value to cancel attaching
+#define ELEMENT_INCOMPATIBLE 1
+
+// /datum/element flags
+/// Causes the detach proc to be called when the host object is being deleted
+#define ELEMENT_DETACH (1 << 0)
+/**
+ * Only elements created with the same arguments given after `id_arg_index` share an element instance
+ * The arguments are the same when the text and number values are the same and all other values have the same ref
+ */
+#define ELEMENT_BESPOKE (1 << 1)
+
+// How multiple components of the exact same type are handled in the same datum
+/// old component is deleted (default)
+#define COMPONENT_DUPE_HIGHLANDER 0
+/// duplicates allowed
+#define COMPONENT_DUPE_ALLOWED 1
+/// new component is deleted
+#define COMPONENT_DUPE_UNIQUE 2
+/// old component is given the initialization args of the new
+#define COMPONENT_DUPE_UNIQUE_PASSARGS 4
+/// each component of the same type is consulted as to whether the duplicate should be allowed
+#define COMPONENT_DUPE_SELECTIVE 5
+
+//Redirection component init flags
+#define REDIRECT_TRANSFER_WITH_TURF 1
+
+//Arch
+#define ARCH_PROB "probability" //Probability for each item
+#define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount
+
+//Ouch my toes!
+#define CALTROP_BYPASS_SHOES 1
+#define CALTROP_IGNORE_WALKERS 2
diff --git a/code/__defines/dcs/helpers.dm b/code/__defines/dcs/helpers.dm
new file mode 100644
index 0000000000..144e94f1fe
--- /dev/null
+++ b/code/__defines/dcs/helpers.dm
@@ -0,0 +1,15 @@
+/// Used to trigger signals and call procs registered for that signal
+/// The datum hosting the signal is automaticaly added as the first argument
+/// Returns a bitfield gathered from all registered procs
+/// Arguments given here are packaged in a list and given to _SendSignal
+#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )
+
+#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) )
+
+/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments
+#define AddElement(arguments...) _AddElement(list(##arguments))
+/// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments
+#define RemoveElement(arguments...) _RemoveElement(list(##arguments))
+
+/// A wrapper for _AddComponent that allows us to pretend we're using normal named arguments
+#define AddComponent(arguments...) _AddComponent(list(##arguments))
diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
new file mode 100644
index 0000000000..26b1d2d44a
--- /dev/null
+++ b/code/__defines/dcs/signals.dm
@@ -0,0 +1,732 @@
+// All signals. Format:
+// When the signal is called: (signal arguments)
+// All signals send the source datum of the signal as the first argument
+
+// global signals
+// These are signals which can be listened to by any component on any parent
+// start global signals with "!", this used to be necessary but now it's just a formatting choice
+
+///from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args)
+#define COMSIG_GLOB_NEW_Z "!new_z"
+/// called after a successful var edit somewhere in the world: (list/args)
+#define COMSIG_GLOB_VAR_EDIT "!var_edit"
+/// called after an explosion happened : (epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
+#define COMSIG_GLOB_EXPLOSION "!explosion"
+/// mob was created somewhere : (mob)
+#define COMSIG_GLOB_MOB_CREATED "!mob_created"
+/// mob died somewhere : (mob , gibbed)
+#define COMSIG_GLOB_MOB_DEATH "!mob_death"
+/// global living say plug - use sparingly: (mob/speaker , message)
+#define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special"
+/// called by datum/cinematic/play() : (datum/cinematic/new_cinematic)
+#define COMSIG_GLOB_PLAY_CINEMATIC "!play_cinematic"
+ #define COMPONENT_GLOB_BLOCK_CINEMATIC (1<<0)
+/// ingame button pressed (/obj/machinery/button/button)
+#define COMSIG_GLOB_BUTTON_PRESSED "!button_pressed"
+
+/// signals from globally accessible objects
+
+///from SSsun when the sun changes position : (azimuth)
+#define COMSIG_SUN_MOVED "sun_moved"
+
+//////////////////////////////////////////////////////////////////
+
+// /datum signals
+/// when a component is added to a datum: (/datum/component)
+#define COMSIG_COMPONENT_ADDED "component_added"
+/// before a component is removed from a datum because of RemoveComponent: (/datum/component)
+#define COMSIG_COMPONENT_REMOVING "component_removing"
+/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
+#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted"
+/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
+#define COMSIG_PARENT_QDELETING "parent_qdeleting"
+/// generic topic handler (usr, href_list)
+#define COMSIG_TOPIC "handle_topic"
+
+/// fires on the target datum when an element is attached to it (/datum/element)
+#define COMSIG_ELEMENT_ATTACH "element_attach"
+/// fires on the target datum when an element is attached to it (/datum/element)
+#define COMSIG_ELEMENT_DETACH "element_detach"
+
+// /atom signals
+///from base of atom/proc/Initialize(): sent any time a new atom is created
+#define COMSIG_ATOM_CREATED "atom_created"
+//from SSatoms InitAtom - Only if the atom was not deleted or failed initialization
+#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success"
+///from base of atom/attackby(): (/obj/item, /mob/living, params)
+#define COMSIG_PARENT_ATTACKBY "atom_attackby"
+///Return this in response if you don't want afterattack to be called
+ #define COMPONENT_NO_AFTERATTACK (1<<0)
+///from base of atom/attack_hulk(): (/mob/living/carbon/human)
+#define COMSIG_ATOM_HULK_ATTACK "hulk_attack"
+///from base of atom/animal_attack(): (/mob/user)
+#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal"
+///from base of atom/examine(): (/mob)
+#define COMSIG_PARENT_EXAMINE "atom_examine"
+///from base of atom/get_examine_name(): (/mob, list/overrides)
+#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name"
+ //Positions for overrides list
+ #define EXAMINE_POSITION_ARTICLE (1<<0)
+ #define EXAMINE_POSITION_BEFORE (1<<1)
+ //End positions
+ #define COMPONENT_EXNAME_CHANGED (1<<0)
+///from base of atom/update_icon(): ()
+#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon"
+ #define COMSIG_ATOM_NO_UPDATE_ICON_STATE (1<<0)
+ #define COMSIG_ATOM_NO_UPDATE_OVERLAYS (1<<1)
+///from base of atom/update_overlays(): (list/new_overlays)
+#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays"
+///from base of atom/update_icon(): (signalOut, did_anything)
+#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon"
+///from base of atom/Entered(): (atom/movable/entering, /atom)
+#define COMSIG_ATOM_ENTERED "atom_entered"
+///from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
+#define COMSIG_ATOM_EXIT "atom_exit"
+ #define COMPONENT_ATOM_BLOCK_EXIT (1<<0)
+///from base of atom/Exited(): (atom/movable/exiting, atom/newloc)
+#define COMSIG_ATOM_EXITED "atom_exited"
+///from base of atom/Bumped(): (/atom/movable)
+#define COMSIG_ATOM_BUMPED "atom_bumped"
+///from base of atom/ex_act(): (severity, target)
+#define COMSIG_ATOM_EX_ACT "atom_ex_act"
+///from base of atom/emp_act(): (severity)
+#define COMSIG_ATOM_EMP_ACT "atom_emp_act"
+///from base of atom/fire_act(): (exposed_temperature, exposed_volume)
+#define COMSIG_ATOM_FIRE_ACT "atom_fire_act"
+///from base of atom/bullet_act(): (/obj/projectile, def_zone)
+#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act"
+///from base of atom/blob_act(): (/obj/structure/blob)
+#define COMSIG_ATOM_BLOB_ACT "atom_blob_act"
+///from base of atom/acid_act(): (acidpwr, acid_volume)
+#define COMSIG_ATOM_ACID_ACT "atom_acid_act"
+///from base of atom/emag_act(): (/mob/user)
+#define COMSIG_ATOM_EMAG_ACT "atom_emag_act"
+///from base of atom/rad_act(intensity)
+#define COMSIG_ATOM_RAD_ACT "atom_rad_act"
+///from base of atom/narsie_act(): ()
+#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act"
+///from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode)
+#define COMSIG_ATOM_RCD_ACT "atom_rcd_act"
+///from base of atom/singularity_pull(): (S, current_size)
+#define COMSIG_ATOM_SING_PULL "atom_sing_pull"
+///from obj/machinery/bsa/full/proc/fire(): ()
+#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass"
+ #define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0)
+///from base of atom/set_light(): (l_range, l_power, l_color)
+#define COMSIG_ATOM_SET_LIGHT "atom_set_light"
+///from base of atom/setDir(): (old_dir, new_dir)
+#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change"
+///from base of atom/handle_atom_del(): (atom/deleted)
+#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del"
+///from base of atom/has_gravity(): (turf/location, list/forced_gravities)
+#define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity"
+///from proc/get_rad_contents(): ()
+#define COMSIG_ATOM_RAD_PROBE "atom_rad_probe"
+ #define COMPONENT_BLOCK_RADIATION (1<<0)
+///from base of datum/radiation_wave/radiate(): (strength)
+#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam"
+ #define COMPONENT_BLOCK_CONTAMINATION (1<<0)
+///from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
+#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass"
+ #define COMPONENT_RAD_WAVE_HANDLED (1<<0)
+///from internal loop in atom/movable/proc/CanReach(): (list/next)
+#define COMSIG_ATOM_CANREACH "atom_can_reach"
+ #define COMPONENT_BLOCK_REACH (1<<0)
+///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act"
+///from base of atom/wrench_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_WRENCH_ACT "atom_wrench_act"
+///from base of atom/multitool_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_MULTITOOL_ACT "atom_multitool_act"
+///from base of atom/welder_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_WELDER_ACT "atom_welder_act"
+///from base of atom/wirecutter_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_WIRECUTTER_ACT "atom_wirecutter_act"
+///from base of atom/crowbar_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_CROWBAR_ACT "atom_crowbar_act"
+///from base of atom/analyser_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_ANALYSER_ACT "atom_analyser_act"
+ #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0)
+///called when teleporting into a protected turf: (channel, turf/origin)
+#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport"
+ #define COMPONENT_BLOCK_TELEPORT (1<<0)
+///called when an atom is added to the hearers on get_hearers_in_view(): (list/processing_list, list/hearers)
+#define COMSIG_ATOM_HEARER_IN_VIEW "atom_hearer_in_view"
+///called when an atom starts orbiting another atom: (atom)
+#define COMSIG_ATOM_ORBIT_BEGIN "atom_orbit_begin"
+///called when an atom stops orbiting another atom: (atom)
+#define COMSIG_ATOM_ORBIT_STOP "atom_orbit_stop"
+/////////////////
+///from base of atom/attack_ghost(): (mob/dead/observer/ghost)
+#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost"
+///from base of atom/attack_hand(): (mob/user)
+#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand"
+///from base of atom/attack_paw(): (mob/user)
+#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
+ #define COMPONENT_NO_ATTACK_HAND (1<<0) //works on all 3.
+//This signal return value bitflags can be found in __DEFINES/misc.dm
+
+///called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels)
+#define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact"
+///called on a movable (NOT living) when someone starts pulling it (atom/movable/puller, state, force)
+#define COMSIG_ATOM_START_PULL "movable_start_pull"
+///called on /living when someone starts pulling it (atom/movable/puller, state, force)
+#define COMSIG_LIVING_START_PULL "living_start_pull"
+
+/////////////////
+
+///from base of area/Entered(): (/area)
+#define COMSIG_ENTER_AREA "enter_area"
+///from base of area/Exited(): (/area)
+#define COMSIG_EXIT_AREA "exit_area"
+///from base of atom/Click(): (location, control, params, mob/user)
+#define COMSIG_CLICK "atom_click"
+///from base of atom/ShiftClick(): (/mob)
+#define COMSIG_CLICK_SHIFT "shift_click"
+ #define COMPONENT_ALLOW_EXAMINATE (1<<0) //Allows the user to examinate regardless of client.eye.
+///from base of atom/CtrlClickOn(): (/mob)
+#define COMSIG_CLICK_CTRL "ctrl_click"
+///from base of atom/AltClick(): (/mob)
+#define COMSIG_CLICK_ALT "alt_click"
+///from base of atom/CtrlShiftClick(/mob)
+#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click"
+///from base of atom/MouseDrop(): (/atom/over, /mob/user)
+#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto"
+ #define COMPONENT_NO_MOUSEDROP (1<<0)
+///from base of atom/MouseDrop_T: (/atom/from, /mob/user)
+#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto"
+
+// /area signals
+
+///from base of area/Entered(): (atom/movable/M)
+#define COMSIG_AREA_ENTERED "area_entered"
+///from base of area/Exited(): (atom/movable/M)
+#define COMSIG_AREA_EXITED "area_exited"
+
+// /turf signals
+
+///from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps)
+#define COMSIG_TURF_CHANGE "turf_change"
+///from base of atom/has_gravity(): (atom/asker, list/forced_gravities)
+#define COMSIG_TURF_HAS_GRAVITY "turf_has_gravity"
+///from base of turf/New(): (turf/source, direction)
+#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new"
+
+// /atom/movable signals
+
+///from base of atom/movable/Moved(): (/atom)
+#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move"
+ #define COMPONENT_MOVABLE_BLOCK_PRE_MOVE (1<<0)
+///from base of atom/movable/Moved(): (/atom, dir)
+#define COMSIG_MOVABLE_MOVED "movable_moved"
+///from base of atom/movable/Cross(): (/atom/movable)
+#define COMSIG_MOVABLE_CROSS "movable_cross"
+///from base of atom/movable/Crossed(): (/atom/movable)
+#define COMSIG_MOVABLE_CROSSED "movable_crossed"
+///when we cross over something (calling Crossed() on that atom)
+#define COMSIG_CROSSED_MOVABLE "crossed_movable"
+///from base of atom/movable/Uncross(): (/atom/movable)
+#define COMSIG_MOVABLE_UNCROSS "movable_uncross"
+ #define COMPONENT_MOVABLE_BLOCK_UNCROSS (1<<0)
+///from base of atom/movable/Uncrossed(): (/atom/movable)
+#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed"
+///from base of atom/movable/Bump(): (/atom)
+#define COMSIG_MOVABLE_BUMP "movable_bump"
+///from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum)
+#define COMSIG_MOVABLE_IMPACT "movable_impact"
+ #define COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH (1<<0) //if true, flip if the impact will push what it hits
+ #define COMPONENT_MOVABLE_IMPACT_NEVERMIND (1<<1) //return true if you destroyed whatever it was you're impacting and there won't be anything for hitby() to run on
+///from base of mob/living/hitby(): (mob/living/target, hit_zone)
+#define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone"
+///from base of atom/movable/buckle_mob(): (mob, force)
+#define COMSIG_MOVABLE_BUCKLE "buckle"
+///from base of atom/movable/unbuckle_mob(): (mob, force)
+#define COMSIG_MOVABLE_UNBUCKLE "unbuckle"
+///from base of atom/movable/throw_at(): (list/args)
+#define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw"
+ #define COMPONENT_CANCEL_THROW (1<<0)
+///from base of atom/movable/throw_at(): (datum/thrownthing, spin)
+#define COMSIG_MOVABLE_POST_THROW "movable_post_throw"
+///from base of atom/movable/onTransitZ(): (old_z, new_z)
+#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit"
+///called when the movable is placed in an unaccessible area, used for stationloving: ()
+#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded"
+///from base of atom/movable/Hear(): (proc args list(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode))
+#define COMSIG_MOVABLE_HEAR "movable_hear"
+ #define HEARING_MESSAGE 1
+ #define HEARING_SPEAKER 2
+// #define HEARING_LANGUAGE 3
+ #define HEARING_RAW_MESSAGE 4
+ /* #define HEARING_RADIO_FREQ 5
+ #define HEARING_SPANS 6
+ #define HEARING_MESSAGE_MODE 7 */
+
+///called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
+#define COMSIG_MOVABLE_DISPOSING "movable_disposing"
+
+// /mob signals
+
+///from base of /mob/Login(): ()
+#define COMSIG_MOB_LOGIN "mob_login"
+///from base of /mob/Logout(): ()
+#define COMSIG_MOB_LOGOUT "mob_logout"
+///from base of mob/death(): (gibbed)
+#define COMSIG_MOB_DEATH "mob_death"
+///from base of mob/set_stat(): (new_stat)
+#define COMSIG_MOB_STATCHANGE "mob_statchange"
+///from base of mob/clickon(): (atom/A, params)
+#define COMSIG_MOB_CLICKON "mob_clickon"
+///from base of mob/MiddleClickOn(): (atom/A)
+#define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon"
+///from base of mob/AltClickOn(): (atom/A)
+#define COMSIG_MOB_ALTCLICKON "mob_altclickon"
+ #define COMSIG_MOB_CANCEL_CLICKON (1<<0)
+
+///from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj
+#define COMSIG_MOB_ALLOWED "mob_allowed"
+///from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources)
+#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic"
+ #define COMPONENT_BLOCK_MAGIC (1<<0)
+///from base of mob/create_mob_hud(): ()
+#define COMSIG_MOB_HUD_CREATED "mob_hud_created"
+///from base of atom/attack_hand(): (mob/user)
+#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand"
+///from base of /obj/item/attack(): (mob/M, mob/user)
+#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack"
+ #define COMPONENT_ITEM_NO_ATTACK (1<<0)
+///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone)
+#define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage"
+///from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters)
+#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack"
+///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, proxiumity_flag, click_parameters)
+#define COMSIG_MOB_ITEM_ATTACK_QDELETED "mob_item_attack_qdeleted"
+///from base of mob/RangedAttack(): (atom/A, params)
+#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged"
+///from base of /mob/throw_item(): (atom/target)
+#define COMSIG_MOB_THROW "mob_throw"
+///from base of /mob/verb/examinate(): (atom/target)
+#define COMSIG_MOB_EXAMINATE "mob_examinate"
+///from base of /mob/update_sight(): ()
+#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight"
+////from /mob/living/say(): ()
+#define COMSIG_MOB_SAY "mob_say"
+ #define COMPONENT_UPPERCASE_SPEECH (1<<0)
+ // used to access COMSIG_MOB_SAY argslist
+ #define SPEECH_MESSAGE 1
+ // #define SPEECH_BUBBLE_TYPE 2
+ #define SPEECH_SPANS 3
+ /* #define SPEECH_SANITIZE 4
+ #define SPEECH_LANGUAGE 5
+ #define SPEECH_IGNORE_SPAM 6
+ #define SPEECH_FORCED 7 */
+
+///from /mob/say_dead(): (mob/speaker, message)
+#define COMSIG_MOB_DEADSAY "mob_deadsay"
+ #define MOB_DEADSAY_SIGNAL_INTERCEPT (1<<0)
+///from /mob/living/emote(): ()
+#define COMSIG_MOB_EMOTE "mob_emote"
+///from base of mob/swap_hand(): (obj/item)
+#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands"
+ #define COMPONENT_BLOCK_SWAP (1<<0)
+
+// /mob/living signals
+
+///from base of mob/living/resist() (/mob/living)
+#define COMSIG_LIVING_RESIST "living_resist"
+///from base of mob/living/IgniteMob() (/mob/living)
+#define COMSIG_LIVING_IGNITED "living_ignite"
+///from base of mob/living/ExtinguishMob() (/mob/living)
+#define COMSIG_LIVING_EXTINGUISHED "living_extinguished"
+///from base of mob/living/electrocute_act(): (shock_damage, source, siemens_coeff, flags)
+#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act"
+///sent when items with siemen coeff. of 0 block a shock: (power_source, source, siemens_coeff, dist_check)
+#define COMSIG_LIVING_SHOCK_PREVENTED "living_shock_prevented"
+///sent by stuff like stunbatons and tasers: ()
+#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock"
+///from base of mob/living/revive() (full_heal, admin_revive)
+#define COMSIG_LIVING_REVIVE "living_revive"
+///from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
+#define COMSIG_LIVING_REGENERATE_LIMBS "living_regen_limbs"
+///from base of /obj/item/bodypart/proc/attach_limb(): (new_limb, special) allows you to fail limb attachment
+#define COMSIG_LIVING_ATTACH_LIMB "living_attach_limb"
+ #define COMPONENT_NO_ATTACH (1<<0)
+///sent from borg recharge stations: (amount, repairs)
+#define COMSIG_PROCESS_BORGCHARGER_OCCUPANT "living_charge"
+///sent when a mob/login() finishes: (client)
+#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login"
+///sent from borg mobs to itself, for tools to catch an upcoming destroy() due to safe decon (rather than detonation)
+#define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon"
+
+//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
+
+///from base of mob/living/Stun() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_STUN "living_stun"
+///from base of mob/living/Knockdown() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown"
+///from base of mob/living/Paralyze() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_PARALYZE "living_paralyze"
+///from base of mob/living/Immobilize() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_IMMOBILIZE "living_immobilize"
+///from base of mob/living/Unconscious() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_UNCONSCIOUS "living_unconscious"
+///from base of mob/living/Sleeping() (amount, update, ignore)
+#define COMSIG_LIVING_STATUS_SLEEP "living_sleeping"
+ #define COMPONENT_NO_STUN (1<<0) //For all of them
+///from base of /mob/living/can_track(): (mob/user)
+#define COMSIG_LIVING_CAN_TRACK "mob_cantrack"
+ #define COMPONENT_CANT_TRACK (1<<0)
+
+// /mob/living/carbon signals
+
+///from base of mob/living/carbon/soundbang_act(): (list(intensity))
+#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang"
+///from /item/organ/proc/Insert() (/obj/item/organ/)
+#define COMSIG_CARBON_GAIN_ORGAN "carbon_gain_organ"
+///from /item/organ/proc/Remove() (/obj/item/organ/)
+#define COMSIG_CARBON_LOSE_ORGAN "carbon_lose_organ"
+///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent)
+#define COMSIG_CARBON_EQUIP_HAT "carbon_equip_hat"
+///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent)
+#define COMSIG_CARBON_UNEQUIP_HAT "carbon_unequip_hat"
+///defined twice, in carbon and human's topics, fired when interacting with a valid embedded_object to pull it out (mob/living/carbon/target, /obj/item, /obj/item/bodypart/L)
+#define COMSIG_CARBON_EMBED_RIP "item_embed_start_rip"
+///called when removing a given item from a mob, from mob/living/carbon/remove_embedded_object(mob/living/carbon/target, /obj/item)
+#define COMSIG_CARBON_EMBED_REMOVAL "item_embed_remove_safe"
+
+// /mob/living/simple_animal/hostile signals
+#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
+ #define COMPONENT_HOSTILE_NO_ATTACK (1<<0)
+
+// /obj signals
+
+///from base of obj/deconstruct(): (disassembled)
+#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct"
+///called in /obj/structure/setAnchored(): (value)
+#define COMSIG_OBJ_SETANCHORED "obj_setanchored"
+///from base of code/game/machinery
+#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench"
+///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide
+#define COMSIG_OBJ_HIDE "obj_hide"
+///called in /obj/update_icon()
+#define COMSIG_OBJ_UPDATE_ICON "obj_update_icon"
+
+// /obj/machinery signals
+
+///from /obj/machinery/obj_break(damage_flag): (damage_flag)
+#define COMSIG_MACHINERY_BROKEN "machinery_broken"
+///from base power_change() when power is lost
+#define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost"
+///from base power_change() when power is restored
+#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored"
+
+// /obj/item signals
+
+///from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
+#define COMSIG_ITEM_ATTACK "item_attack"
+///from base of obj/item/attack_self(): (/mob)
+#define COMSIG_ITEM_ATTACK_SELF "item_attack_self"
+ #define COMPONENT_NO_INTERACT (1<<0)
+///from base of obj/item/attack_obj(): (/obj, /mob)
+#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj"
+ #define COMPONENT_NO_ATTACK_OBJ (1<<0)
+///from base of obj/item/pre_attack(): (atom/target, mob/user, params)
+#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack"
+ #define COMPONENT_NO_ATTACK (1<<0)
+///from base of obj/item/afterattack(): (atom/target, mob/user, params)
+#define COMSIG_ITEM_AFTERATTACK "item_afterattack"
+///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params)
+#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted"
+///from base of obj/item/equipped(): (/mob/equipper, slot)
+#define COMSIG_ITEM_EQUIPPED "item_equip"
+///from base of obj/item/dropped(): (mob/user)
+#define COMSIG_ITEM_DROPPED "item_drop"
+///from base of obj/item/pickup(): (/mob/taker)
+#define COMSIG_ITEM_PICKUP "item_pickup"
+///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone)
+#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone"
+///return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user)
+#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul"
+///called before marking an object for retrieval, checked in /obj/effect/proc_holder/spell/targeted/summonitem/cast() : (mob/user)
+#define COMSIG_ITEM_MARK_RETRIEVAL "item_mark_retrieval"
+ #define COMPONENT_BLOCK_MARK_RETRIEVAL (1<<0)
+///from base of obj/item/hit_reaction(): (list/args)
+#define COMSIG_ITEM_HIT_REACT "item_hit_react"
+///called on item when crossed by something (): (/atom/movable, mob/living/crossed)
+#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed"
+///called on item when microwaved (): (obj/machinery/microwave/M)
+#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act"
+///from base of item/sharpener/attackby(): (amount, max)
+#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act"
+ #define COMPONENT_BLOCK_SHARPEN_APPLIED (1<<0)
+ #define COMPONENT_BLOCK_SHARPEN_BLOCKED (1<<1)
+ #define COMPONENT_BLOCK_SHARPEN_ALREADY (1<<2)
+ #define COMPONENT_BLOCK_SHARPEN_MAXED (1<<3)
+///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user)
+#define COMSIG_TOOL_IN_USE "tool_in_use"
+///from base of [/obj/item/proc/tool_start_check]: (mob/living/user)
+#define COMSIG_TOOL_START_USE "tool_start_use"
+///from [/obj/item/proc/disableEmbedding]:
+#define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed"
+///from [/obj/effect/mine/proc/triggermine]:
+#define COMSIG_MINE_TRIGGERED "minegoboom"
+
+// /obj/item signals for economy
+///called when an item is sold by the exports subsystem
+#define COMSIG_ITEM_SOLD "item_sold"
+///called when a wrapped up structure is opened by hand
+#define COMSIG_STRUCTURE_UNWRAPPED "structure_unwrapped"
+#define COMSIG_ITEM_UNWRAPPED "item_unwrapped"
+///called when a wrapped up item is opened by hand
+ #define COMSIG_ITEM_SPLIT_VALUE (1<<0)
+///called when getting the item's exact ratio for cargo's profit.
+#define COMSIG_ITEM_SPLIT_PROFIT "item_split_profits"
+///called when getting the item's exact ratio for cargo's profit, without selling the item.
+#define COMSIG_ITEM_SPLIT_PROFIT_DRY "item_split_profits_dry"
+
+// /obj/item/clothing signals
+
+///from base of obj/item/clothing/shoes/proc/step_action(): ()
+#define COMSIG_SHOES_STEP_ACTION "shoes_step_action"
+///from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit)
+#define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle"
+
+// /obj/item/implant signals
+///from base of /obj/item/implant/proc/activate(): ()
+#define COMSIG_IMPLANT_ACTIVATED "implant_activated"
+///from base of /obj/item/implant/proc/implant(): (list/args)
+#define COMSIG_IMPLANT_IMPLANTING "implant_implanting"
+ #define COMPONENT_STOP_IMPLANTING (1<<0)
+///called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant)
+#define COMSIG_IMPLANT_OTHER "implant_other"
+ //#define COMPONENT_STOP_IMPLANTING (1<<0) //The name makes sense for both
+ #define COMPONENT_DELETE_NEW_IMPLANT (1<<1)
+ #define COMPONENT_DELETE_OLD_IMPLANT (1<<2)
+///called on implants being implanted into someone with an uplink implant: (datum/component/uplink)
+#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists"
+ //This uses all return values of COMSIG_IMPLANT_OTHER
+
+// /obj/item/pda signals
+
+///called on pda when the user changes the ringtone: (mob/living/user, new_ringtone)
+#define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone"
+ #define COMPONENT_STOP_RINGTONE_CHANGE (1<<0)
+#define COMSIG_PDA_CHECK_DETONATE "pda_check_detonate"
+ #define COMPONENT_PDA_NO_DETONATE (1<<0)
+
+// /obj/item/radio signals
+
+///called from base of /obj/item/radio/proc/set_frequency(): (list/args)
+#define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency"
+
+// /obj/item/pen signals
+
+///called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user)
+#define COMSIG_PEN_ROTATED "pen_rotated"
+
+// /obj/item/gun signals
+
+///called in /obj/item/gun/process_fire (user, target, params, zone_override)
+#define COMSIG_MOB_FIRED_GUN "mob_fired_gun"
+
+// /obj/item/grenade signals
+
+///called in /obj/item/gun/process_fire (user, target, params, zone_override)
+#define COMSIG_GRENADE_PRIME "grenade_prime"
+///called in /obj/item/gun/process_fire (user, target, params, zone_override)
+#define COMSIG_GRENADE_ARMED "grenade_armed"
+
+// /obj/projectile signals (sent to the firer)
+
+///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle)
+#define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit"
+///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle)
+#define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit"
+///from base of /obj/projectile/proc/fire(): (obj/projectile, atom/original_target)
+#define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire"
+///from the base of /obj/projectile/proc/fire(): ()
+#define COMSIG_PROJECTILE_FIRE "projectile_fire"
+///sent to targets during the process_hit proc of projectiles
+#define COMSIG_PROJECTILE_PREHIT "com_proj_prehit"
+///sent to targets during the process_hit proc of projectiles
+#define COMSIG_PROJECTILE_RANGE_OUT "projectile_range_out"
+///sent when trying to force an embed (mainly for projectiles, only used in the embed element)
+#define COMSIG_EMBED_TRY_FORCE "item_try_embed"
+
+///sent to targets during the process_hit proc of projectiles
+#define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init"
+
+// /obj/mecha signals
+
+///sent from mecha action buttons to the mecha they're linked to
+#define COMSIG_MECHA_ACTION_ACTIVATE "mecha_action_activate"
+
+// /mob/living/carbon/human signals
+
+///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity)
+#define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack"
+///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity)
+#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack"
+///from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
+#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby"
+///Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted)
+#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit"
+///Whenever EquipRanked is called, called after job is set
+#define COMSIG_JOB_RECEIVED "job_received"
+
+// /datum/species signals
+
+///from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
+#define COMSIG_SPECIES_GAIN "species_gain"
+///from datum/species/on_species_loss(): (datum/species/lost_species)
+#define COMSIG_SPECIES_LOSS "species_loss"
+
+// /datum/song signals
+
+///sent to the instrument when a song starts playing
+#define COMSIG_SONG_START "song_start"
+///sent to the instrument when a song stops playing
+#define COMSIG_SONG_END "song_end"
+
+/*******Component Specific Signals*******/
+//Janitor
+
+///(): Returns bitflags of wet values.
+#define COMSIG_TURF_IS_WET "check_turf_wet"
+///(max_strength, immediate, duration_decrease = INFINITY): Returns bool.
+#define COMSIG_TURF_MAKE_DRY "make_turf_try"
+///called on an object to clean it of cleanables. Usualy with soap: (num/strength)
+#define COMSIG_COMPONENT_CLEAN_ACT "clean_act"
+
+//Creamed
+
+///called when you wash your face at a sink: (num/strength)
+#define COMSIG_COMPONENT_CLEAN_FACE_ACT "clean_face_act"
+
+//Food
+
+///from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder)
+#define COMSIG_FOOD_EATEN "food_eaten"
+
+//Gibs
+
+///from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases)
+#define COMSIG_GIBS_STREAK "gibs_streak"
+
+//Mood
+
+///called when you send a mood event from anywhere in the code.
+#define COMSIG_ADD_MOOD_EVENT "add_mood"
+///Mood event that only RnD members listen for
+#define COMSIG_ADD_MOOD_EVENT_RND "RND_add_mood"
+///called when you clear a mood event from anywhere in the code.
+#define COMSIG_CLEAR_MOOD_EVENT "clear_mood"
+
+//NTnet
+
+///called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata))
+#define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive"
+
+//Nanites
+
+///() returns TRUE if nanites are found
+#define COMSIG_HAS_NANITES "has_nanites"
+///() returns TRUE if nanites have stealth
+#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy"
+///() deletes the nanite component
+#define COMSIG_NANITE_DELETE "nanite_delete"
+///(list/nanite_programs) - makes the input list a copy the nanites' program list
+#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs"
+///(amount) Returns nanite amount
+#define COMSIG_NANITE_GET_VOLUME "nanite_get_volume"
+///(amount) Sets current nanite volume to the given amount
+#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume"
+///(amount) Adjusts nanite volume by the given amount
+#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust"
+///(amount) Sets maximum nanite volume to the given amount
+#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume"
+///(amount(0-100)) Sets cloud ID to the given amount
+#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud"
+///(method) Modify cloud sync status. Method can be toggle, enable or disable
+#define COMSIG_NANITE_SET_CLOUD_SYNC "nanite_set_cloud_sync"
+///(amount) Sets safety threshold to the given amount
+#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety"
+///(amount) Sets regeneration rate to the given amount
+#define COMSIG_NANITE_SET_REGEN "nanite_set_regen"
+///(code(1-9999)) Called when sending a nanite signal to a mob.
+#define COMSIG_NANITE_SIGNAL "nanite_signal"
+///(comm_code(1-9999), comm_message) Called when sending a nanite comm signal to a mob.
+#define COMSIG_NANITE_COMM_SIGNAL "nanite_comm_signal"
+///(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
+#define COMSIG_NANITE_SCAN "nanite_scan"
+///(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
+#define COMSIG_NANITE_UI_DATA "nanite_ui_data"
+///(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
+#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program"
+ ///Installation successful
+ #define COMPONENT_PROGRAM_INSTALLED (1<<0)
+ ///Installation failed, but there are still nanites
+ #define COMPONENT_PROGRAM_NOT_INSTALLED (1<<1)
+///(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component
+#define COMSIG_NANITE_SYNC "nanite_sync"
+
+// /datum/component/storage signals
+
+///() - returns bool.
+#define COMSIG_CONTAINS_STORAGE "is_storage"
+///(obj/item/inserting, mob/user, silent, force) - returns bool
+#define COMSIG_TRY_STORAGE_INSERT "storage_try_insert"
+///(mob/show_to, force) - returns bool.
+#define COMSIG_TRY_STORAGE_SHOW "storage_show_to"
+///(mob/hide_from) - returns bool
+#define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from"
+///returns bool
+#define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all"
+///(newstate)
+#define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state"
+///() - returns bool. MUST CHECK IF STORAGE IS THERE FIRST!
+#define COMSIG_IS_STORAGE_LOCKED "storage_get_lockstate"
+///(type, atom/destination, amount = INFINITY, check_adjacent, force, mob/user, list/inserted) - returns bool - type can be a list of types.
+#define COMSIG_TRY_STORAGE_TAKE_TYPE "storage_take_type"
+///(type, amount = INFINITY, force = FALSE). Force will ignore max_items, and amount is normally clamped to max_items.
+#define COMSIG_TRY_STORAGE_FILL_TYPE "storage_fill_type"
+///(obj, new_loc, force = FALSE) - returns bool
+#define COMSIG_TRY_STORAGE_TAKE "storage_take_obj"
+///(loc) - returns bool - if loc is null it will dump at parent location.
+#define COMSIG_TRY_STORAGE_QUICK_EMPTY "storage_quick_empty"
+///(list/list_to_inject_results_into, recursively_search_inside_storages = TRUE)
+#define COMSIG_TRY_STORAGE_RETURN_INVENTORY "storage_return_inventory"
+///(obj/item/insertion_candidate, mob/user, silent) - returns bool
+#define COMSIG_TRY_STORAGE_CAN_INSERT "storage_can_equip"
+
+// /datum/component/two_handed signals
+
+///from base of datum/component/two_handed/proc/wield(mob/living/carbon/user): (/mob/user)
+#define COMSIG_TWOHANDED_WIELD "twohanded_wield"
+ #define COMPONENT_TWOHANDED_BLOCK_WIELD (1<<0)
+///from base of datum/component/two_handed/proc/unwield(mob/living/carbon/user): (/mob/user)
+#define COMSIG_TWOHANDED_UNWIELD "twohanded_unwield"
+
+// /datum/action signals
+
+///from base of datum/action/proc/Trigger(): (datum/action)
+#define COMSIG_ACTION_TRIGGER "action_trigger"
+ #define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0)
+
+//Xenobio hotkeys
+
+///from slime CtrlClickOn(): (/mob)
+#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl"
+///from slime AltClickOn(): (/mob)
+#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt"
+///from slime ShiftClickOn(): (/mob)
+#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift"
+///from turf ShiftClickOn(): (/mob)
+#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift"
+///from turf AltClickOn(): (/mob)
+#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt"
+///from monkey CtrlClickOn(): (/mob)
+#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl"
+
+///SSalarm signals
+#define COMSIG_TRIGGERED_ALARM "ssalarm_triggered"
+#define COMSIG_CANCELLED_ALARM "ssalarm_cancelled"
diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm
index 46d8a347e8..8890430375 100644
--- a/code/__defines/misc_vr.dm
+++ b/code/__defines/misc_vr.dm
@@ -20,7 +20,7 @@
//For custom species
#define STARTING_SPECIES_POINTS 1
-#define MAX_SPECIES_TRAITS 5
+#define MAX_SPECIES_TRAITS 8 //CHOMPEdit
// Xenochimera thing mostly
#define REVIVING_NOW -1
diff --git a/code/__defines/rust_g.dm b/code/__defines/rust_g.dm
new file mode 100644
index 0000000000..9c9e2637ce
--- /dev/null
+++ b/code/__defines/rust_g.dm
@@ -0,0 +1,103 @@
+// rust_g.dm - DM API for rust_g extension library
+//
+// To configure, create a `rust_g.config.dm` and set what you care about from
+// the following options:
+//
+// #define RUST_G "path/to/rust_g"
+// Override the .dll/.so detection logic with a fixed path or with detection
+// logic of your own.
+//
+// #define RUSTG_OVERRIDE_BUILTINS
+// Enable replacement rust-g functions for certain builtins. Off by default.
+
+#ifndef RUST_G
+// Default automatic RUST_G detection.
+// On Windows, looks in the standard places for `rust_g.dll`.
+// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of
+// `librust_g.so` (preferred) or `rust_g` (old).
+
+/* This comment bypasses grep checks */ /var/__rust_g
+
+/proc/__detect_rust_g()
+ if (world.system_type == UNIX)
+ if (fexists("./librust_g.so"))
+ // No need for LD_LIBRARY_PATH badness.
+ return __rust_g = "./librust_g.so"
+ else if (fexists("./rust_g"))
+ // Old dumb filename.
+ return __rust_g = "./rust_g"
+ else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g"))
+ // Old dumb filename in `~/.byond/bin`.
+ return __rust_g = "rust_g"
+ else
+ // It's not in the current directory, so try others
+ return __rust_g = "librust_g.so"
+ else
+ return __rust_g = "rust_g"
+
+#define RUST_G (__rust_g || __detect_rust_g())
+#endif
+
+#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
+#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
+#define RUSTG_JOB_ERROR "JOB PANICKED"
+
+#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname)
+#define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data)
+
+#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y)
+
+#define rustg_file_read(fname) call(RUST_G, "file_read")(fname)
+#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname)
+#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname)
+#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname)
+
+#ifdef RUSTG_OVERRIDE_BUILTINS
+#define file2text(fname) rustg_file_read("[fname]")
+#define text2file(text, fname) rustg_file_append(text, "[fname]")
+#endif
+
+#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev)
+#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev)
+
+#define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text)
+#define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname)
+
+#define RUSTG_HASH_MD5 "md5"
+#define RUSTG_HASH_SHA1 "sha1"
+#define RUSTG_HASH_SHA256 "sha256"
+#define RUSTG_HASH_SHA512 "sha512"
+
+#ifdef RUSTG_OVERRIDE_BUILTINS
+#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
+#endif
+
+#define rustg_json_is_valid(text) (call(RUST_G, "json_is_valid")(text) == "true")
+
+#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format)
+/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")()
+
+#define rustg_url_encode(text) call(RUST_G, "url_encode")(text)
+#define rustg_url_decode(text) call(RUST_G, "url_decode")(text)
+
+#ifdef RUSTG_OVERRIDE_BUILTINS
+#define url_encode(text) rustg_url_encode(text)
+#define url_decode(text) rustg_url_decode(text)
+#endif
+
+#define RUSTG_HTTP_METHOD_GET "get"
+#define RUSTG_HTTP_METHOD_PUT "put"
+#define RUSTG_HTTP_METHOD_DELETE "delete"
+#define RUSTG_HTTP_METHOD_PATCH "patch"
+#define RUSTG_HTTP_METHOD_HEAD "head"
+#define RUSTG_HTTP_METHOD_POST "post"
+#define rustg_http_request_blocking(method, url, body, headers) call(RUST_G, "http_request_blocking")(method, url, body, headers)
+#define rustg_http_request_async(method, url, body, headers) call(RUST_G, "http_request_async")(method, url, body, headers)
+#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id)
+
+#define rustg_sql_connect_pool(options) call(RUST_G, "sql_connect_pool")(options)
+#define rustg_sql_query_async(handle, query, params) call(RUST_G, "sql_query_async")(handle, query, params)
+#define rustg_sql_query_blocking(handle, query, params) call(RUST_G, "sql_query_blocking")(handle, query, params)
+#define rustg_sql_connected(handle) call(RUST_G, "sql_connected")(handle)
+#define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle)
+#define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]")
diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm
index 54362278d4..8909238db2 100644
--- a/code/__defines/species_languages_vr.dm
+++ b/code/__defines/species_languages_vr.dm
@@ -9,6 +9,7 @@
#define LANGUAGE_DAEMON "Daemon"
#define LANGUAGE_ENOCHIAN "Enochian"
#define LANGUAGE_VESPINAE "Vespinae"
+#define LANGUAGE_SPACER "Spacer"
#define LANGUAGE_CHIMPANZEE "Chimpanzee"
#define LANGUAGE_NEAERA "Neaera"
diff --git a/code/__defines/vv.dm b/code/__defines/vv.dm
index e71d6e2f8f..70ae1ff035 100644
--- a/code/__defines/vv.dm
+++ b/code/__defines/vv.dm
@@ -50,6 +50,7 @@
#define VV_HK_EXPOSE "expose"
#define VV_HK_CALLPROC "proc_call"
#define VV_HK_MARK "mark"
+#define VV_HK_ADDCOMPONENT "addcomponent"
// /atom
#define VV_HK_ATOM_EXPLODE "turf_explode"
diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm
index 757555f037..3bef9b4f15 100644
--- a/code/_helpers/logging.dm
+++ b/code/_helpers/logging.dm
@@ -1,25 +1,17 @@
//print an error message to world.log
-// Fall back to using old format if we are not using rust-g
-#ifdef RUST_G
- #define WRITE_LOG(log, text) call(RUST_G, "log_write")(log, text)
-#else
- #define WRITE_LOG(log, text) log << "\[[time_stamp()]][text]"
-#endif
+//This is an external call, "true" and "false" are how rust parses out booleans
+#define WRITE_LOG(log, text) rustg_log_write(log, text, "true")
+#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false")
/* For logging round startup. */
/proc/start_log(log)
- #ifndef RUST_G
- log = file(log)
- #endif
WRITE_LOG(log, "START: Starting up [log_path].")
return log
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
/proc/shutdown_logging()
- #ifdef RUST_G
- call(RUST_G, "log_close_all")()
- #endif
+ rustg_log_close_all()
/proc/error(msg)
to_world_log("## ERROR: [msg]")
diff --git a/code/_helpers/sorts/comparators.dm b/code/_helpers/sorts/comparators.dm
index f4a8c575c9..704042531a 100644
--- a/code/_helpers/sorts/comparators.dm
+++ b/code/_helpers/sorts/comparators.dm
@@ -61,4 +61,7 @@
/proc/cmp_recipe_complexity_dsc(datum/recipe/A, datum/recipe/B)
var/a_score = LAZYLEN(A.items) + LAZYLEN(A.reagents) + LAZYLEN(A.fruit)
var/b_score = LAZYLEN(B.items) + LAZYLEN(B.reagents) + LAZYLEN(B.fruit)
- return b_score - a_score
\ No newline at end of file
+ return b_score - a_score
+
+/proc/cmp_typepaths_asc(A, B)
+ return sorttext("[B]","[A]")
\ No newline at end of file
diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm
index 77019ab7b9..52dada1cf9 100644
--- a/code/_helpers/type2type.dm
+++ b/code/_helpers/type2type.dm
@@ -381,3 +381,19 @@
. += copytext(text, last_found, found)
last_found = found + delim_len
while (found)
+
+/proc/type2parent(child)
+ var/string_type = "[child]"
+ var/last_slash = findlasttext(string_type, "/")
+ if(last_slash == 1)
+ switch(child)
+ if(/datum)
+ return null
+ if(/obj || /mob)
+ return /atom/movable
+ if(/area || /turf)
+ return /atom
+ else
+ return /datum
+
+ return text2path(copytext(string_type, 1, last_slash))
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index eba949e02d..00ad3a0a58 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -1605,3 +1605,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
// Third one is the text that will be clickable.
/proc/href(href_src, list/href_params, href_text)
return "[href_text] "
+
+/proc/CallAsync(datum/source, proctype, list/arguments)
+ set waitfor = FALSE
+ return call(source, proctype)(arglist(arguments))
\ No newline at end of file
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 8f34599fba..ddfe620570 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -21,6 +21,8 @@ avoid code duplication. This includes items that may sometimes act as a standard
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
/obj/item/proc/attack_self(mob/user)
+ if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT)
+ return
return
// Called at the start of resolve_attackby(), before the actual attack.
@@ -35,10 +37,13 @@ avoid code duplication. This includes items that may sometimes act as a standard
// No comment
/atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters)
- return
+ if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_NO_AFTERATTACK)
+ return TRUE
+ return FALSE
/atom/movable/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters)
- if(!(W.flags & NOBLUDGEON))
+ . = ..()
+ if(!. && !(W.flags & NOBLUDGEON))
visible_message("[src] has been hit by [user] with [W]. ")
/mob/living/attackby(obj/item/I, mob/user, var/attack_modifier, var/click_parameters)
diff --git a/code/_onclick/observer_vr.dm b/code/_onclick/observer_vr.dm
deleted file mode 100644
index b81ea955a4..0000000000
--- a/code/_onclick/observer_vr.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/item/device/paicard/attack_ghost(mob/user as mob)
- if(src.pai != null) //Have a person in them already?
- user.examinate(src)
- return
- var/choice = input(user, "You sure you want to inhabit this PAI?") in list("Yes", "No")
- var/pai_name = input(user, "Choose your character's name", "Character Name") as text
- var/actual_pai_name = sanitize_name(pai_name)
- var/pai_key
- if (isnull(pai_name))
- return
- if(choice == "Yes")
- pai_key = user.key
- else
- return
- var/turf/location = get_turf(src)
- var/obj/item/device/paicard/card = new(location)
- var/mob/living/silicon/pai/pai = new(card)
- qdel(src)
- pai.key = pai_key
- card.setPersonality(pai)
- pai.SetName(actual_pai_name)
\ No newline at end of file
diff --git a/code/controllers/subsystems/dcs.dm b/code/controllers/subsystems/dcs.dm
new file mode 100644
index 0000000000..104c3eef31
--- /dev/null
+++ b/code/controllers/subsystems/dcs.dm
@@ -0,0 +1,54 @@
+PROCESSING_SUBSYSTEM_DEF(dcs)
+ name = "Datum Component System"
+ flags = SS_NO_INIT
+ wait = 1 SECONDS
+
+ var/list/elements_by_type = list()
+
+/datum/controller/subsystem/processing/dcs/Recover()
+ comp_lookup = SSdcs.comp_lookup
+
+/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments)
+ var/datum/element/eletype = arguments[1]
+ var/element_id = eletype
+
+ if(!ispath(eletype, /datum/element))
+ CRASH("Attempted to instantiate [eletype] as a /datum/element")
+
+ if(initial(eletype.element_flags) & ELEMENT_BESPOKE)
+ element_id = GetIdFromArguments(arguments)
+
+ . = elements_by_type[element_id]
+ if(.)
+ return
+ . = elements_by_type[element_id] = new eletype
+
+/****
+ * Generates an id for bespoke elements when given the argument list
+ * Generating the id here is a bit complex because we need to support named arguments
+ * Named arguments can appear in any order and we need them to appear after ordered arguments
+ * We assume that no one will pass in a named argument with a value of null
+ **/
+/datum/controller/subsystem/processing/dcs/proc/GetIdFromArguments(list/arguments)
+ var/datum/element/eletype = arguments[1]
+ var/list/fullid = list("[eletype]")
+ var/list/named_arguments = list()
+ for(var/i in initial(eletype.id_arg_index) to length(arguments))
+ var/key = arguments[i]
+ var/value
+ if(istext(key))
+ value = arguments[key]
+ if(!(istext(key) || isnum(key)))
+ key = REF(key)
+ key = "[key]" // Key is stringified so numbers dont break things
+ if(!isnull(value))
+ if(!(istext(value) || isnum(value)))
+ value = REF(value)
+ named_arguments["[key]"] = value
+ else
+ fullid += "[key]"
+
+ if(length(named_arguments))
+ named_arguments = sortList(named_arguments)
+ fullid += named_arguments
+ return list2params(fullid)
diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm
index 9938fa20eb..5573b23ae8 100644
--- a/code/controllers/subsystems/garbage.dm
+++ b/code/controllers/subsystems/garbage.dm
@@ -284,9 +284,12 @@ SUBSYSTEM_DEF(garbage)
if(isnull(D.gc_destroyed))
+ if(SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted
+ return
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/start_tick = world.tick_usage
+ SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy
var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up.
if(world.time != start_time)
I.slept_destroy++
diff --git a/code/datums/components/README.md b/code/datums/components/README.md
new file mode 100644
index 0000000000..03f7d3a587
--- /dev/null
+++ b/code/datums/components/README.md
@@ -0,0 +1,9 @@
+# Datum Component System (DCS)
+
+## Concept
+
+Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
+
+See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole.
+
+### See/Define signals and their arguments in [__DEFINES\dcs\signals.dm](../../__DEFINES/dcs/signals.dm)
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
new file mode 100644
index 0000000000..4ada8af23b
--- /dev/null
+++ b/code/datums/components/_component.dm
@@ -0,0 +1,537 @@
+/**
+ * # Component
+ *
+ * The component datum
+ *
+ * A component should be a single standalone unit
+ * of functionality, that works by receiving signals from it's parent
+ * object to provide some single functionality (i.e a slippery component)
+ * that makes the object it's attached to cause people to slip over.
+ * Useful when you want shared behaviour independent of type inheritance
+ */
+/datum/component
+ /**
+ * Defines how duplicate existing components are handled when added to a datum
+ *
+ * See [COMPONENT_DUPE_*][COMPONENT_DUPE_ALLOWED] definitions for available options
+ */
+ var/dupe_mode = COMPONENT_DUPE_HIGHLANDER
+
+ /**
+ * The type to check for duplication
+ *
+ * `null` means exact match on `type` (default)
+ *
+ * Any other type means that and all subtypes
+ */
+ var/dupe_type
+
+ /// The datum this components belongs to
+ var/datum/parent
+
+ /**
+ * Only set to true if you are able to properly transfer this component
+ *
+ * At a minimum [RegisterWithParent][/datum/component/proc/RegisterWithParent] and [UnregisterFromParent][/datum/component/proc/UnregisterFromParent] should be used
+ *
+ * Make sure you also implement [PostTransfer][/datum/component/proc/PostTransfer] for any post transfer handling
+ */
+ var/can_transfer = FALSE
+
+/**
+ * Create a new component.
+ *
+ * Additional arguments are passed to [Initialize()][/datum/component/proc/Initialize]
+ *
+ * Arguments:
+ * * datum/P the parent datum this component reacts to signals from
+ */
+/datum/component/New(list/raw_args)
+ parent = raw_args[1]
+ var/list/arguments = raw_args.Copy(2)
+ if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE)
+ stack_trace("Incompatible [type] assigned to a [parent.type]! args: [json_encode(arguments)]")
+ qdel(src, TRUE, TRUE)
+ return
+
+ _JoinParent(parent)
+
+/**
+ * Called during component creation with the same arguments as in new excluding parent.
+ *
+ * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead
+ */
+/datum/component/proc/Initialize(...)
+ return
+
+/**
+ * Properly removes the component from `parent` and cleans up references
+ *
+ * Arguments:
+ * * force - makes it not check for and remove the component from the parent
+ * * silent - deletes the component without sending a [COMSIG_COMPONENT_REMOVING] signal
+ */
+/datum/component/Destroy(force=FALSE, silent=FALSE)
+ if(!force && parent)
+ _RemoveFromParent()
+ if(!silent)
+ SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src)
+ parent = null
+ return ..()
+
+/**
+ * Internal proc to handle behaviour of components when joining a parent
+ */
+/datum/component/proc/_JoinParent()
+ var/datum/P = parent
+ //lazy init the parent's dc list
+ var/list/dc = P.datum_components
+ if(!dc)
+ P.datum_components = dc = list()
+
+ //set up the typecache
+ var/our_type = type
+ for(var/I in _GetInverseTypeList(our_type))
+ var/test = dc[I]
+ if(test) //already another component of this type here
+ var/list/components_of_type
+ if(!length(test))
+ components_of_type = list(test)
+ dc[I] = components_of_type
+ else
+ components_of_type = test
+ if(I == our_type) //exact match, take priority
+ var/inserted = FALSE
+ for(var/J in 1 to components_of_type.len)
+ var/datum/component/C = components_of_type[J]
+ if(C.type != our_type) //but not over other exact matches
+ components_of_type.Insert(J, I)
+ inserted = TRUE
+ break
+ if(!inserted)
+ components_of_type += src
+ else //indirect match, back of the line with ya
+ components_of_type += src
+ else //only component of this type, no list
+ dc[I] = src
+
+ RegisterWithParent()
+
+/**
+ * Internal proc to handle behaviour when being removed from a parent
+ */
+/datum/component/proc/_RemoveFromParent()
+ var/datum/P = parent
+ var/list/dc = P.datum_components
+ for(var/I in _GetInverseTypeList())
+ var/list/components_of_type = dc[I]
+ if(length(components_of_type)) //
+ var/list/subtracted = components_of_type - src
+ if(subtracted.len == 1) //only 1 guy left
+ dc[I] = subtracted[1] //make him special
+ else
+ dc[I] = subtracted
+ else //just us
+ dc -= I
+ if(!dc.len)
+ P.datum_components = null
+
+ UnregisterFromParent()
+
+/**
+ * Register the component with the parent object
+ *
+ * Use this proc to register with your parent object
+ *
+ * Overridable proc that's called when added to a new parent
+ */
+/datum/component/proc/RegisterWithParent()
+ return
+
+/**
+ * Unregister from our parent object
+ *
+ * Use this proc to unregister from your parent object
+ *
+ * Overridable proc that's called when removed from a parent
+ * *
+ */
+/datum/component/proc/UnregisterFromParent()
+ return
+
+/**
+ * Register to listen for a signal from the passed in target
+ *
+ * This sets up a listening relationship such that when the target object emits a signal
+ * the source datum this proc is called upon, will recieve a callback to the given proctype
+ * Return values from procs registered must be a bitfield
+ *
+ * Arguments:
+ * * datum/target The target to listen for signals from
+ * * sig_type_or_types Either a string signal name, or a list of signal names (strings)
+ * * proctype The proc to call back when the signal is emitted
+ * * override If a previous registration exists you must explicitly set this
+ */
+/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE)
+ if(QDELETED(src) || QDELETED(target))
+ return
+
+ var/list/procs = signal_procs
+ if(!procs)
+ signal_procs = procs = list()
+ if(!procs[target])
+ procs[target] = list()
+ var/list/lookup = target.comp_lookup
+ if(!lookup)
+ target.comp_lookup = lookup = list()
+
+ var/list/sig_types = islist(sig_type_or_types) ? sig_type_or_types : list(sig_type_or_types)
+ for(var/sig_type in sig_types)
+ if(!override && procs[target][sig_type])
+ stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning")
+
+ procs[target][sig_type] = proctype
+
+ if(!lookup[sig_type]) // Nothing has registered here yet
+ lookup[sig_type] = src
+ else if(lookup[sig_type] == src) // We already registered here
+ continue
+ else if(!length(lookup[sig_type])) // One other thing registered here
+ lookup[sig_type] = list(lookup[sig_type]=TRUE)
+ lookup[sig_type][src] = TRUE
+ else // Many other things have registered here
+ lookup[sig_type][src] = TRUE
+
+ signal_enabled = TRUE
+
+/**
+ * Stop listening to a given signal from target
+ *
+ * Breaks the relationship between target and source datum, removing the callback when the signal fires
+ *
+ * Doesn't care if a registration exists or not
+ *
+ * Arguments:
+ * * datum/target Datum to stop listening to signals from
+ * * sig_typeor_types Signal string key or list of signal keys to stop listening to specifically
+ */
+/datum/proc/UnregisterSignal(datum/target, sig_type_or_types)
+ var/list/lookup = target.comp_lookup
+ if(!signal_procs || !signal_procs[target] || !lookup)
+ return
+ if(!islist(sig_type_or_types))
+ sig_type_or_types = list(sig_type_or_types)
+ for(var/sig in sig_type_or_types)
+ if(!signal_procs[target][sig])
+ continue
+ switch(length(lookup[sig]))
+ if(2)
+ lookup[sig] = (lookup[sig]-src)[1]
+ if(1)
+ stack_trace("[target] ([target.type]) somehow has single length list inside comp_lookup")
+ if(src in lookup[sig])
+ lookup -= sig
+ if(!length(lookup))
+ target.comp_lookup = null
+ break
+ if(0)
+ lookup -= sig
+ if(!length(lookup))
+ target.comp_lookup = null
+ break
+ else
+ lookup[sig] -= src
+
+ signal_procs[target] -= sig_type_or_types
+ if(!signal_procs[target].len)
+ signal_procs -= target
+
+/**
+ * Called on a component when a component of the same type was added to the same parent
+ *
+ * See [/datum/component/var/dupe_mode]
+ *
+ * `C`'s type will always be the same of the called component
+ */
+/datum/component/proc/InheritComponent(datum/component/C, i_am_original)
+ return
+
+
+/**
+ * Called on a component when a component of the same type was added to the same parent with [COMPONENT_DUPE_SELECTIVE]
+ *
+ * See [/datum/component/var/dupe_mode]
+ *
+ * `C`'s type will always be the same of the called component
+ *
+ * return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component
+ */
+/datum/component/proc/CheckDupeComponent(datum/component/C, ...)
+ return
+
+
+/**
+ * Callback Just before this component is transferred
+ *
+ * Use this to do any special cleanup you might need to do before being deregged from an object
+ */
+/datum/component/proc/PreTransfer()
+ return
+
+/**
+ * Callback Just after a component is transferred
+ *
+ * Use this to do any special setup you need to do after being moved to a new object
+ *
+ * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead
+ */
+/datum/component/proc/PostTransfer()
+ return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it
+
+/**
+ * Internal proc to create a list of our type and all parent types
+ */
+/datum/component/proc/_GetInverseTypeList(our_type = type)
+ //we can do this one simple trick
+ var/current_type = parent_type
+ . = list(our_type, current_type)
+ //and since most components are root level + 1, this won't even have to run
+ while (current_type != /datum/component)
+ current_type = type2parent(current_type)
+ . += current_type
+
+/**
+ * Internal proc to handle most all of the signaling procedure
+ *
+ * Will runtime if used on datums with an empty component list
+ *
+ * Use the [SEND_SIGNAL] define instead
+ */
+/datum/proc/_SendSignal(sigtype, list/arguments)
+ var/target = comp_lookup[sigtype]
+ if(!length(target))
+ var/datum/C = target
+ if(!C.signal_enabled)
+ return NONE
+ var/proctype = C.signal_procs[src][sigtype]
+ return NONE | CallAsync(C, proctype, arguments)
+ . = NONE
+ for(var/I in target)
+ var/datum/C = I
+ if(!C.signal_enabled)
+ continue
+ var/proctype = C.signal_procs[src][sigtype]
+ . |= CallAsync(C, proctype, arguments)
+
+// The type arg is casted so initial works, you shouldn't be passing a real instance into this
+/**
+ * Return any component assigned to this datum of the given type
+ *
+ * This will throw an error if it's possible to have more than one component of that type on the parent
+ *
+ * Arguments:
+ * * datum/component/c_type The typepath of the component you want to get a reference to
+ */
+/datum/proc/GetComponent(datum/component/c_type)
+ // RETURN_TYPE(c_type)
+ if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
+ stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
+ var/list/dc = datum_components
+ if(!dc)
+ return null
+ . = dc[c_type]
+ if(length(.))
+ return .[1]
+
+// The type arg is casted so initial works, you shouldn't be passing a real instance into this
+/**
+ * Return any component assigned to this datum of the exact given type
+ *
+ * This will throw an error if it's possible to have more than one component of that type on the parent
+ *
+ * Arguments:
+ * * datum/component/c_type The typepath of the component you want to get a reference to
+ */
+/datum/proc/GetExactComponent(datum/component/c_type)
+ // RETURN_TYPE(c_type)
+ if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
+ stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
+ var/list/dc = datum_components
+ if(!dc)
+ return null
+ var/datum/component/C = dc[c_type]
+ if(C)
+ if(length(C))
+ C = C[1]
+ if(C.type == c_type)
+ return C
+ return null
+
+/**
+ * Get all components of a given type that are attached to this datum
+ *
+ * Arguments:
+ * * c_type The component type path
+ */
+/datum/proc/GetComponents(c_type)
+ var/list/dc = datum_components
+ if(!dc)
+ return null
+ . = dc[c_type]
+ if(!length(.))
+ return list(.)
+
+/**
+ * Creates an instance of `new_type` in the datum and attaches to it as parent
+ *
+ * Sends the [COMSIG_COMPONENT_ADDED] signal to the datum
+ *
+ * Returns the component that was created. Or the old component in a dupe situation where [COMPONENT_DUPE_UNIQUE] was set
+ *
+ * If this tries to add a component to an incompatible type, the component will be deleted and the result will be `null`. This is very unperformant, try not to do it
+ *
+ * Properly handles duplicate situations based on the `dupe_mode` var
+ */
+/datum/proc/_AddComponent(list/raw_args)
+ var/new_type = raw_args[1]
+ var/datum/component/nt = new_type
+ var/dm = initial(nt.dupe_mode)
+ var/dt = initial(nt.dupe_type)
+
+ var/datum/component/old_comp
+ var/datum/component/new_comp
+
+ if(ispath(nt))
+ if(nt == /datum/component)
+ CRASH("[nt] attempted instantiation!")
+ else
+ new_comp = nt
+ nt = new_comp.type
+
+ raw_args[1] = src
+
+ if(dm != COMPONENT_DUPE_ALLOWED)
+ if(!dt)
+ old_comp = GetExactComponent(nt)
+ else
+ old_comp = GetComponent(dt)
+ if(old_comp)
+ switch(dm)
+ if(COMPONENT_DUPE_UNIQUE)
+ if(!new_comp)
+ new_comp = new nt(raw_args)
+ if(!QDELETED(new_comp))
+ old_comp.InheritComponent(new_comp, TRUE)
+ QDEL_NULL(new_comp)
+ if(COMPONENT_DUPE_HIGHLANDER)
+ if(!new_comp)
+ new_comp = new nt(raw_args)
+ if(!QDELETED(new_comp))
+ new_comp.InheritComponent(old_comp, FALSE)
+ QDEL_NULL(old_comp)
+ if(COMPONENT_DUPE_UNIQUE_PASSARGS)
+ if(!new_comp)
+ var/list/arguments = raw_args.Copy(2)
+ arguments.Insert(1, null, TRUE)
+ old_comp.InheritComponent(arglist(arguments))
+ else
+ old_comp.InheritComponent(new_comp, TRUE)
+ if(COMPONENT_DUPE_SELECTIVE)
+ var/list/arguments = raw_args.Copy()
+ arguments[1] = new_comp
+ var/make_new_component = TRUE
+ for(var/i in GetComponents(new_type))
+ var/datum/component/C = i
+ if(C.CheckDupeComponent(arglist(arguments)))
+ make_new_component = FALSE
+ QDEL_NULL(new_comp)
+ break
+ if(!new_comp && make_new_component)
+ new_comp = new nt(raw_args)
+ else if(!new_comp)
+ new_comp = new nt(raw_args) // There's a valid dupe mode but there's no old component, act like normal
+ else if(!new_comp)
+ new_comp = new nt(raw_args) // Dupes are allowed, act like normal
+
+ if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy
+ SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp)
+ return new_comp
+ return old_comp
+
+/**
+ * Get existing component of type, or create it and return a reference to it
+ *
+ * Use this if the item needs to exist at the time of this call, but may not have been created before now
+ *
+ * Arguments:
+ * * component_type The typepath of the component to create or return
+ * * ... additional arguments to be passed when creating the component if it does not exist
+ */
+/datum/proc/LoadComponent(component_type, ...)
+ . = GetComponent(component_type)
+ if(!.)
+ return _AddComponent(args)
+
+/**
+ * Removes the component from parent, ends up with a null parent
+ */
+/datum/component/proc/RemoveComponent()
+ if(!parent)
+ return
+ var/datum/old_parent = parent
+ PreTransfer()
+ _RemoveFromParent()
+ parent = null
+ SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src)
+
+/**
+ * Transfer this component to another parent
+ *
+ * Component is taken from source datum
+ *
+ * Arguments:
+ * * datum/component/target Target datum to transfer to
+ */
+/datum/proc/TakeComponent(datum/component/target)
+ if(!target || target.parent == src)
+ return
+ if(target.parent)
+ target.RemoveComponent()
+ target.parent = src
+ var/result = target.PostTransfer()
+ switch(result)
+ if(COMPONENT_INCOMPATIBLE)
+ var/c_type = target.type
+ qdel(target)
+ CRASH("Incompatible [c_type] transfer attempt to a [type]!")
+
+ if(target == AddComponent(target))
+ target._JoinParent()
+
+/**
+ * Transfer all components to target
+ *
+ * All components from source datum are taken
+ *
+ * Arguments:
+ * * /datum/target the target to move the components to
+ */
+/datum/proc/TransferComponents(datum/target)
+ var/list/dc = datum_components
+ if(!dc)
+ return
+ var/comps = dc[/datum/component]
+ if(islist(comps))
+ for(var/datum/component/I in comps)
+ if(I.can_transfer)
+ target.TakeComponent(I)
+ else
+ var/datum/component/C = comps
+ if(C.can_transfer)
+ target.TakeComponent(comps)
+
+/**
+ * Return the object that is the host of any UI's that this component has
+ */
+/datum/component/tgui_host()
+ return parent
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index d806728f5d..1f9feeeacf 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -6,6 +6,10 @@
/datum
var/gc_destroyed //Time when this object was destroyed.
var/list/active_timers //for SStimer
+ var/list/datum_components //for /datum/components
+ var/list/comp_lookup
+ var/list/signal_procs
+ var/signal_enabled = FALSE
var/weakref/weakref // Holder of weakref instance pointing to this datum
var/datum_flags = NONE
@@ -30,6 +34,38 @@
weakref = null // Clear this reference to ensure it's kept for as brief duration as possible.
+ //BEGIN: ECS SHIT
+ signal_enabled = FALSE
+
+ var/list/dc = datum_components
+ if(dc)
+ var/all_components = dc[/datum/component]
+ if(length(all_components))
+ for(var/I in all_components)
+ var/datum/component/C = I
+ qdel(C, FALSE, TRUE)
+ else
+ var/datum/component/C = all_components
+ qdel(C, FALSE, TRUE)
+ dc.Cut()
+
+ var/list/lookup = comp_lookup
+ if(lookup)
+ for(var/sig in lookup)
+ var/list/comps = lookup[sig]
+ if(length(comps))
+ for(var/i in comps)
+ var/datum/component/comp = i
+ comp.UnregisterSignal(src, sig)
+ else
+ var/datum/component/comp = comps
+ comp.UnregisterSignal(src, sig)
+ comp_lookup = lookup = null
+
+ for(var/target in signal_procs)
+ UnregisterSignal(target, signal_procs[target])
+ //END: ECS SHIT
+
tag = null
SStgui.close_uis(src)
return QDEL_HINT_QUEUE
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index aa28473fa3..95db63ff33 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -26,6 +26,7 @@
VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object")
VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete")
VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player")
+ VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element")
//This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks!
//href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables!
@@ -58,6 +59,34 @@
usr.client.mark_datum(src)
IF_VV_OPTION(VV_HK_CALLPROC)
usr.client.callproc_datum(src)
+ IF_VV_OPTION(VV_HK_ADDCOMPONENT)
+ if(!check_rights(NONE))
+ return
+ var/list/names = list()
+ var/list/componentsubtypes = sortTim(subtypesof(/datum/component), /proc/cmp_typepaths_asc)
+ names += "---Components---"
+ names += componentsubtypes
+ names += "---Elements---"
+ names += sortTim(subtypesof(/datum/element), /proc/cmp_typepaths_asc)
+ var/result = input(usr, "Choose a component/element to add","better know what ur fuckin doin pal") as null|anything in names
+ if(!usr || !result || result == "---Components---" || result == "---Elements---")
+ return
+ if(QDELETED(src))
+ to_chat(usr, "That thing doesn't exist anymore!", confidential = TRUE)
+ return
+ var/list/lst = usr.client.get_callproc_args()
+ if(!lst)
+ return
+ var/datumname = "error"
+ lst.Insert(1, result)
+ if(result in componentsubtypes)
+ datumname = "component"
+ _AddComponent(lst)
+ else
+ datumname = "element"
+ _AddElement(lst)
+ log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].")
+ message_admins("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)]. ")
/datum/proc/vv_get_header()
. = list()
diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm
new file mode 100644
index 0000000000..caf02b65b9
--- /dev/null
+++ b/code/datums/elements/_element.dm
@@ -0,0 +1,55 @@
+/**
+ * A holder for simple behaviour that can be attached to many different types
+ *
+ * Only one element of each type is instanced during game init.
+ * Otherwise acts basically like a lightweight component.
+ */
+/datum/element
+ /// Option flags for element behaviour
+ var/element_flags = NONE
+ /**
+ * The index of the first attach argument to consider for duplicate elements
+ *
+ * Is only used when flags contains [ELEMENT_BESPOKE]
+ *
+ * This is infinity so you must explicitly set this
+ */
+ var/id_arg_index = INFINITY
+
+/// Activates the functionality defined by the element on the given target datum
+/datum/element/proc/Attach(datum/target)
+ // SHOULD_CALL_PARENT(1)
+ if(type == /datum/element)
+ return ELEMENT_INCOMPATIBLE
+ SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src)
+ if(element_flags & ELEMENT_DETACH)
+ RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE)
+
+/// Deactivates the functionality defines by the element on the given datum
+/datum/element/proc/Detach(datum/source, force)
+ SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src)
+ // SHOULD_CALL_PARENT(1)
+ UnregisterSignal(source, COMSIG_PARENT_QDELETING)
+
+/datum/element/Destroy(force)
+ if(!force)
+ return QDEL_HINT_LETMELIVE
+ SSdcs.elements_by_type -= type
+ return ..()
+
+//DATUM PROCS
+
+/// Finds the singleton for the element type given and attaches it to src
+/datum/proc/_AddElement(list/arguments)
+ var/datum/element/ele = SSdcs.GetElement(arguments)
+ arguments[1] = src
+ if(ele.Attach(arglist(arguments)) == ELEMENT_INCOMPATIBLE)
+ CRASH("Incompatible [arguments[1]] assigned to a [type]! args: [json_encode(args)]")
+
+/**
+ * Finds the singleton for the element type given and detaches it from src
+ * You only need additional arguments beyond the type if you're using [ELEMENT_BESPOKE]
+ */
+/datum/proc/_RemoveElement(list/arguments)
+ var/datum/element/ele = SSdcs.GetElement(arguments)
+ ele.Detach(src)
diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm
index 4619acd3b5..855f4c5213 100644
--- a/code/datums/looping_sounds/item_sounds.dm
+++ b/code/datums/looping_sounds/item_sounds.dm
@@ -27,3 +27,19 @@
/datum/looping_sound/geiger/stop()
. = ..()
last_radiation = 0
+
+/datum/looping_sound/small_motor
+ start_sound = 'sound/items/small_motor/motor_start_nopull.ogg'
+ start_length = 2 SECONDS
+ mid_sounds = list(
+ 'sound/items/small_motor/motor_idle.ogg',
+ 'sound/items/small_motor/motor_fast.ogg',
+ 'sound/items/small_motor/motor_faster.ogg'
+ )
+ mid_length = 1.9 SECONDS //someone make this loop better please, i'm no good at sound. the clips should be 2 seconds exact but there's a gap if it's set to 2
+ end_sound = 'sound/items/small_motor/motor_end.ogg'
+ var/speed = 1
+
+/datum/looping_sound/small_motor/get_sound(starttime)
+ speed = clamp(speed, 1, 3)
+ return ..(starttime, mid_sounds[speed])
\ No newline at end of file
diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm
index 311f9673f6..3cd61c1cc6 100644
--- a/code/datums/observation/moved.dm
+++ b/code/datums/observation/moved.dm
@@ -25,11 +25,6 @@ GLOBAL_DATUM_INIT(moved_event, /decl/observ/moved, new)
/********************
* Movement Handling *
********************/
-
-/atom/Entered(var/atom/movable/am, var/atom/old_loc)
- . = ..()
- GLOB.moved_event.raise_event(am, old_loc, am.loc)
-
/atom/movable/Entered(var/atom/movable/am, atom/old_loc)
. = ..()
if(GLOB.moved_event.has_listeners(am))
diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm
index 5d2bc99089..165c5fbfef 100644
--- a/code/datums/supplypacks/engineering.dm
+++ b/code/datums/supplypacks/engineering.dm
@@ -151,6 +151,13 @@
containername = "Singularity Generator crate"
access = access_ce
+/datum/supply_pack/eng/engine/tesla_gen
+ name = "Tesla Generator crate"
+ contains = list(/obj/machinery/the_singularitygen/tesla)
+ containertype = /obj/structure/closet/crate/secure/einstein
+ containername = "Tesla Generator crate"
+ access = access_ce
+
/datum/supply_pack/eng/engine/collector
name = "Collector crate"
contains = list(/obj/machinery/power/rad_collector = 3)
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index ff3f6f2319..a15ca2bb2c 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -358,6 +358,13 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "\improper Thunderdome (Observer.)"
icon_state = "purple"
+/area/virtual_reality
+ name = "Virtual Reality"
+ icon_state = "Virtual_Reality"
+ dynamic_lighting = 0
+ requires_power = 0
+ flags = AREA_FLAG_IS_NOT_PERSISTENT
+
//ENEMY
//names are used
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index b56db48dab..5ec5af0e6b 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -210,6 +210,7 @@
if(user.client?.prefs.examine_text_mode == EXAMINE_MODE_SWITCH_TO_PANEL)
user.client.statpanel = "Examine" // Switch to stat panel
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, output)
return output
// Don't make these call bicon or anything, these are what bicon uses. They need to return an icon.
@@ -223,6 +224,7 @@
//called to set the atom's dir and used to add behaviour to dir-changes
/atom/proc/set_dir(new_dir)
+ SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, new_dir)
. = new_dir != dir
dir = new_dir
@@ -631,3 +633,17 @@
/atom/proc/speech_bubble(bubble_state = "", bubble_loc = src, list/bubble_recipients = list())
return
+
+/atom/Entered(atom/movable/AM, atom/old_loc)
+ . = ..()
+ GLOB.moved_event.raise_event(AM, old_loc, AM.loc)
+ SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, old_loc)
+
+/atom/Exit(atom/movable/AM, atom/new_loc)
+ . = ..()
+ if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, AM, new_loc) & COMPONENT_ATOM_BLOCK_EXIT)
+ return FALSE
+
+/atom/Exited(atom/movable/AM, atom/new_loc)
+ . = ..()
+ SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
\ No newline at end of file
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index d87eae4118..5a19d9ef79 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -29,8 +29,7 @@
desc = "Used to control various station atmospheric systems. The light indicates the current air status of the area."
icon = 'icons/obj/monitors_vr.dmi' //CHOMPEdit: Continues using new air alarm sprite, contrary to YW
icon_state = "alarm0"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
use_power = USE_POWER_IDLE
idle_power_usage = 80
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 0f209a1a99..d15ea493ec 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -2,8 +2,7 @@
name = "button"
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
-// plane = TURF_PLANE //Can't have them under tables, oh well.
-// layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
desc = "A remote control switch for something."
var/id = null
var/active = 0
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 29783c4c9c..f04aba5a25 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -59,8 +59,7 @@
name = "Telescreen"
desc = "Used for watching an empty arena."
icon_state = "wallframe"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
icon_keyboard = null
icon_screen = null
light_range_on = 0
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index b0531e8438..c2876572d7 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -79,8 +79,7 @@
name = "guest pass terminal"
desc = "Used to print temporary passes for people. Handy!"
icon_state = "guest"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
icon_keyboard = null
icon_screen = "pass"
density = 0
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index 521f07cf67..4fa8a41901 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -148,6 +148,7 @@ obj/machinery/door/airlock/Destroy()
obj/machinery/airlock_sensor
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_sensor_off"
+ layer = ABOVE_WINDOW_LAYER
name = "airlock sensor"
desc = "Sends atmospheric readings to a nearby controller."
@@ -233,6 +234,7 @@ obj/machinery/airlock_sensor/airlock_exterior/shuttle/return_air()
obj/machinery/access_button
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_button_standby"
+ layer = ABOVE_WINDOW_LAYER
name = "access button"
anchored = 1
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 9fa4945f5b..c9262675cf 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -22,6 +22,7 @@
name = "Door Timer"
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
+ layer = ABOVE_WINDOW_LAYER
desc = "A remote control for a door."
req_access = list(access_brig)
anchored = 1.0 // can't pick it up
diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm
index 262ffacf41..96a7e15aa0 100644
--- a/code/game/machinery/embedded_controller/airlock_controllers.dm
+++ b/code/game/machinery/embedded_controller/airlock_controllers.dm
@@ -15,6 +15,7 @@
var/list/dummy_terminals = list()
var/cycle_to_external_air = 0
valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int", "abort", "purge", "secure")
+ layer = ABOVE_WINDOW_LAYER
/obj/machinery/embedded_controller/radio/airlock/Destroy()
// TODO - Leshana - Implement dummy terminals
diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm
index e80869e4d9..315d470432 100644
--- a/code/game/machinery/fire_alarm.dm
+++ b/code/game/machinery/fire_alarm.dm
@@ -6,8 +6,7 @@ FIRE ALARM
desc = "\"Pull this in case of emergency\" . Thus, keep pulling it forever."
icon = 'icons/obj/monitors.dmi'
icon_state = "fire0"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
var/detecting = 1.0
var/working = 1.0
var/time = 10.0
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 5aa42ff26a..cbd688b643 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -4,6 +4,7 @@
desc = "A wall-mounted flashbulb device."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "mflash1"
+ layer = ABOVE_WINDOW_LAYER
var/id = null
var/range = 2 //this is roughly the size of brig cell
var/disable = 0
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index ee887db2f5..70a2e3ce4c 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -48,6 +48,7 @@
desc = "A wall-mounted ignition device."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "migniter"
+ layer = ABOVE_WINDOW_LAYER
var/id = null
var/disable = 0
var/last_spark = 0
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 0179dff591..c078b854d0 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -6,6 +6,7 @@
desc = "It turns lights on and off. What are you, simple?"
icon = 'icons/obj/power_vr.dmi' // VOREStation Edit
icon_state = "light1"
+ layer = ABOVE_WINDOW_LAYER
anchored = 1.0
use_power = USE_POWER_IDLE
idle_power_usage = 10
diff --git a/code/game/machinery/neonsign.dm b/code/game/machinery/neonsign.dm
index bdaa3b62fd..742a810d4a 100644
--- a/code/game/machinery/neonsign.dm
+++ b/code/game/machinery/neonsign.dm
@@ -4,6 +4,7 @@
desc = "Small wall-mounted electronic sign"
icon = 'icons/obj/neonsigns.dmi'
icon_state = "sign_off"
+ layer = ABOVE_WINDOW_LAYER
plane = MOB_PLANE
use_power = USE_POWER_IDLE
idle_power_usage = 2
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index ffa444612a..25c3c631f2 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -126,8 +126,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!"
icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit
icon_state = "newscaster_normal"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
var/isbroken = 0 //1 if someone banged it with something heavy
var/ispowered = 1 //starts powered, changes with power_change()
//var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored.
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 86b339e6d5..a24bc582b9 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -28,8 +28,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
anchored = 1
icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit
icon_state = "req_comp0"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
circuit = /obj/item/weapon/circuitboard/request
var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department
var/list/message_log = list() //List of all messages
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 14b85a7861..949b8a4df6 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -13,7 +13,7 @@
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
name = "status display"
anchored = 1
density = 0
@@ -267,4 +267,4 @@
#undef FOND_SIZE
#undef FONT_COLOR
#undef FONT_STYLE
-#undef SCROLL_SPEED
\ No newline at end of file
+#undef SCROLL_SPEED
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index d0764221ba..4a88b7248b 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -59,6 +59,7 @@ var/list/ai_status_emotions = list(
/obj/machinery/ai_status_display
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
+ layer = ABOVE_WINDOW_LAYER
name = "AI display"
anchored = 1
density = 0
diff --git a/code/game/machinery/vending_machines.dm b/code/game/machinery/vending_machines.dm
index 82c9eb0581..3ebb93289a 100644
--- a/code/game/machinery/vending_machines.dm
+++ b/code/game/machinery/vending_machines.dm
@@ -396,6 +396,7 @@
description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments."
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
icon_state = "wallmed"
+ layer = ABOVE_WINDOW_LAYER
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/stack/medical/bruise_pack = 2,
/obj/item/stack/medical/ointment = 2,
@@ -413,6 +414,7 @@
desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment."
description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments."
icon_state = "wallmed"
+ layer = ABOVE_WINDOW_LAYER
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,
/obj/item/weapon/reagent_containers/syringe/antitoxin = 3,
@@ -826,3 +828,53 @@
/obj/item/stack/cable_coil/random = 4)
premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
+
+
+/obj/machinery/vending/virtual_autodrobe
+ name = "Virtual AutoDrobe"
+ desc = "A virtual vending machine for virtual avatar customization."
+ icon_state = "Theater"
+ product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
+ products = list(/obj/item/weapon/storage/box/syndie_kit/chameleon = 20)
+
+
+/obj/machinery/vending/deathmatch
+ name = "Annihilation Shop (Green)"
+ desc = "A virtual vending machine for virtual murder equipment. This one's for green team."
+ products = list(/obj/item/weapon/melee/energy/sword = 5,
+ /obj/item/weapon/melee/energy/axe = 5,
+ /obj/item/weapon/melee/baton/loaded = 5,
+ /obj/item/weapon/gun/energy/laser = 5,
+ /obj/item/weapon/gun/projectile/shotgun/pump/combat = 5,
+ /obj/item/ammo_magazine/clip/c12g/pellet = 40,
+ /obj/item/ammo_magazine/clip/c12g = 50,
+ /obj/item/weapon/storage/box/flashbangs = 2,
+ /obj/item/clothing/head/helmet/swat = 5,
+ /obj/item/clothing/suit/armor/vest = 5,
+ /obj/item/clothing/head/helmet/thunderdome = 5,
+ /obj/item/clothing/shoes/brown = 5,
+ /obj/item/clothing/suit/armor/tdome/green = 5,
+ /obj/item/clothing/under/color/green = 5,
+ /obj/item/weapon/reagent_containers/pill/adminordrazine = 10,
+ /obj/item/weapon/tool/crowbar = 1)
+
+
+/obj/machinery/vending/deathmatch/red
+ name = "Annihilation Shop (Red)"
+ desc = "A virtual vending machine for virtual murder equipment. This one's for red team."
+ products = list(/obj/item/weapon/melee/energy/sword = 5,
+ /obj/item/weapon/melee/energy/axe = 5,
+ /obj/item/weapon/melee/baton/loaded = 5,
+ /obj/item/weapon/gun/energy/laser = 5,
+ /obj/item/weapon/gun/projectile/shotgun/pump/combat = 5,
+ /obj/item/ammo_magazine/clip/c12g/pellet = 40,
+ /obj/item/ammo_magazine/clip/c12g = 50,
+ /obj/item/weapon/storage/box/flashbangs = 2,
+ /obj/item/clothing/head/helmet/swat = 5,
+ /obj/item/clothing/suit/armor/vest = 5,
+ /obj/item/clothing/head/helmet/thunderdome = 5,
+ /obj/item/clothing/shoes/brown = 5,
+ /obj/item/clothing/suit/armor/tdome/red = 5,
+ /obj/item/clothing/under/color/red = 5,
+ /obj/item/weapon/reagent_containers/pill/adminordrazine = 10,
+ /obj/item/weapon/tool/crowbar = 1)
diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm
index 80d7945ea4..c48c10184a 100644
--- a/code/game/mecha/micro/mechfab_designs_vr.dm
+++ b/code/game/mecha/micro/mechfab_designs_vr.dm
@@ -41,14 +41,14 @@
materials = list(DEFAULT_WALL_MATERIAL = 12500)
/datum/design/item/mecha/drill/micro
- name = "Miniature Drill"
+ name = "Micro Drill" //CHOMPedit
id = "micro_drill"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/micro
time = 5
materials = list(DEFAULT_WALL_MATERIAL = 2500)
/datum/design/item/mecha/hydraulic_clamp/micro
- name = "Mounted ore box"
+ name = "Mounted micro ore box" //CHOMPedit
id = "ore_scoop"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop
time = 5
@@ -103,31 +103,31 @@
materials = list(DEFAULT_WALL_MATERIAL = 12500, "plastic" = 7500)
/datum/design/item/mecha/taser/micro
- name = "\improper TS-12 \"Suppressor\" integrated taser"
+ name = "\improper TS-12 \"Suppressor\" integrated micro taser" //CHOMPedit
id = "micro_taser"
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/microtaser
/datum/design/item/mecha/weapon/laser/micro
- name = "\improper WS-19 \"Torch\" laser carbine"
+ name = "\improper WS-19 \"Torch\" micro laser carbine" //CHOMPedit
id = "micro_laser"
// req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/microlaser
/datum/design/item/mecha/weapon/laser_heavy/micro
- name = "\improper PC-20 \"Lance\" light laser cannon"
+ name = "\improper PC-20 \"Lance\" micro laser cannon" //CHOMPedit
id = "micro_laser_heavy"
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, "diamond" = 2000)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/microheavy
/datum/design/item/mecha/weapon/grenade_launcher/micro
- name = "\improper FP-20 mounted grenade launcher"
+ name = "\improper FP-20 mounted micro flashbang launcher" //CHOMPedit
id = "micro_flashbang_launcher"
// req_tech = list(TECH_COMBAT = 3)
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\""
+ name = "\improper Remington C-12 \"Micro-Boomstick\"" //CHOMPedit
desc = "A mounted combat shotgun with integrated ammo-lathe."
id = "micro_scattershot"
// req_tech = list(TECH_COMBAT = 4)
diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm
index d36f9fa0a3..2ea7e44763 100644
--- a/code/game/mecha/micro/micro_equipment.dm
+++ b/code/game/mecha/micro/micro_equipment.dm
@@ -6,9 +6,9 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/microlaser
w_class = ITEMSIZE_LARGE
- desc = "A mounted laser-carbine for light exosuits."
+ desc = "A mounted micro laser-carbine for micro mechs." //CHOMPedit
equip_cooldown = 10 // same as the laser carbine
- name = "\improper WS-19 \"Torch\" laser carbine"
+ name = "\improper WS-19 \"Torch\" micro laser carbine" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "micromech_laser"
energy_drain = 50
@@ -19,9 +19,9 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/microheavy
w_class = ITEMSIZE_LARGE
- desc = "A mounted laser cannon for light exosuits."
+ desc = "A mounted micro laser cannon for micro mechs." //CHOMPedit
equip_cooldown = 30 // same as portable
- name = "\improper PC-20 \"Lance\" light laser cannon"
+ name = "\improper PC-20 \"Lance\" micro light laser cannon" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "micromech_lasercannon"
energy_drain = 120
@@ -32,8 +32,8 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/microtaser
w_class = ITEMSIZE_LARGE
- desc = "A mounted taser for light exosuits."
- name = "\improper TS-12 \"Suppressor\" integrated taser"
+ desc = "A mounted micro taser for micro mechs." //CHOMPedit
+ name = "\improper TS-12 \"Suppressor\" integrated micro taser" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "micromech_taser"
energy_drain = 40
@@ -45,8 +45,8 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun
w_class = ITEMSIZE_LARGE
- desc = "A mounted combat shotgun with integrated ammo-lathe."
- name = "\improper Remington C-12 \"Boomstick\""
+ desc = "A mounted micro combat shotgun with integrated ammo-lathe." //CHOMPedit
+ name = "\improper Remington C-12 \"Micro-Boomstick\"" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "micromech_shotgun"
equip_cooldown = 15
@@ -84,8 +84,8 @@
/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"
+ desc = "A mounted micro flashbang launcher for micro mechs." //CHOMPedit
+ name = "\improper FP-20 mounted micro flashbang launcher" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "micromech_launcher"
projectiles = 1
@@ -103,8 +103,8 @@
/obj/item/mecha_parts/mecha_equipment/tool/drill/micro
w_class = ITEMSIZE_LARGE
- name = "drill"
- desc = "This is the drill that'll sorta poke holes in the heavens!"
+ name = "Micro Drill" //CHOMPedit
+ desc = "This is the micro drill that'll sorta poke holes in the heavens!" //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "microdrill"
equip_cooldown = 30
@@ -155,8 +155,8 @@
/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop
w_class = ITEMSIZE_LARGE
- name = "Mounted ore box"
- desc = "A mounted ore scoop and hopper, for gathering ores."
+ name = "Mounted micro ore box" //CHOMPedit
+ desc = "A small mounted ore scoop and hopper, for gathering ores in a micro mech." //CHOMPedit
icon = 'icons/mecha/mecha_equipment_vr.dmi'
icon_state = "microscoop"
equip_cooldown = 5
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 77e463c0d0..c3850ad0dd 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -33,23 +33,29 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard)
QDEL_NULL(radio)
return ..()
-/obj/item/device/paicard/attack_ghost(mob/observer/dead/user)
- if(istype(user) && user.can_admin_interact())
- switch(alert(user, "Would you like to become a pAI by force? (Admin)", "pAI Creation", "Yes", "No"))
- if("Yes")
- // Copied from paiController/Topic
- var/mob/living/silicon/pai/pai = new(src)
- pai.name = user.name
- pai.real_name = pai.name
- pai.key = user.key
+// VOREStation Edit - Allow everyone to become a pAI
+/obj/item/device/paicard/attack_ghost(mob/user as mob)
+ if(pai != null) //Have a person in them already?
+ return ..()
- setPersonality(pai)
- looking_for_personality = FALSE
+ var/choice = input(user, "You sure you want to inhabit this PAI?") in list("Yes", "No")
+ if(choice == "No")
+ return ..()
- if(pai.mind)
- update_antag_icons(pai.mind)
+ var/pai_name = input(user, "Choose your character's name", "Character Name") as text
+ var/actual_pai_name = sanitize_name(pai_name)
+ if(isnull(actual_pai_name))
+ return ..()
+
+ var/turf/location = get_turf(src)
+ var/obj/item/device/paicard/card = new(location)
+ var/mob/living/silicon/pai/new_pai = new(card)
+ qdel(src)
+ new_pai.key = user.key
+ card.setPersonality(new_pai)
+ new_pai.SetName(actual_pai_name)
return ..()
-
+// VOREStation Edit End
/obj/item/device/paicard/attack_self(mob/user)
if (!in_range(src, user))
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 05be57c265..b122b590ad 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -3,8 +3,7 @@
desc = "Talk through this."
icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon
icon_state = "intercom"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
w_class = ITEMSIZE_LARGE
canhear_range = 7 //VOREStation Edit
diff --git a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
index 99eba1931c..098926f535 100644
--- a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
+++ b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
@@ -4,6 +4,10 @@
name = "stack of grass"
type_to_spawn = /obj/item/stack/tile/grass
+/obj/fiftyspawner/grass/sif
+ name = "stack of sifgrass"
+ type_to_spawn = /obj/item/stack/tile/grass/sif
+
/obj/fiftyspawner/wood
name = "stack of wood"
type_to_spawn = /obj/item/stack/tile/wood
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 9a7886cd78..1612725741 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -46,6 +46,12 @@
no_variants = FALSE
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
+
+/obj/item/stack/tile/grass/sif
+ name = "sivian grass tile"
+ singular_name = "sivian grass floor tile"
+ desc = "A patch of grass like those that decorate the plains of Sif."
+
/*
* Wood
*/
diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm
index 0433d9041d..4391901918 100644
--- a/code/game/objects/items/toys/toys.dm
+++ b/code/game/objects/items/toys/toys.dm
@@ -114,6 +114,18 @@
w_class = ITEMSIZE_LARGE
drop_sound = 'sound/items/drop/rubber.ogg'
+/obj/item/toy/colorballoon /// To color it, VV the 'color' var with a hex color code with the # included.
+ name = "balloon"
+ desc = "It's a plain little balloon. Comes in many colors!"
+ throwforce = 0
+ throw_speed = 4
+ throw_range = 20
+ force = 0
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "colorballoon"
+ w_class = ITEMSIZE_LARGE
+ drop_sound = 'sound/items/drop/rubber.ogg'
+
/*
* Fake telebeacon
*/
@@ -1438,4 +1450,36 @@
name = "purple king"
desc = "A large king piece for playing chess. It's made of a purple-colored glass."
description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose."
- icon_state = "b-king"
\ No newline at end of file
+ icon_state = "b-king"
+
+/// Balloon structures
+
+/obj/structure/balloon
+ name = "generic balloon"
+ desc = "A generic balloon. How boring."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "ghostballoon"
+ anchored = 0
+ density = 0
+
+/obj/structure/balloon/attack_hand(mob/user)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+
+ if(user.a_intent == I_HELP)
+ user.visible_message("\The [user] pokes [src]! ","You poke [src]! ")
+ else if (user.a_intent == I_HURT)
+ user.visible_message("\The [user] punches [src]! ","You punch [src]! ")
+ else if (user.a_intent == I_GRAB)
+ user.visible_message("\The [user] attempts to pop [src]! ","You attempt to pop [src]! ")
+ else
+ user.visible_message("\The [user] lightly bats the [src]. ","You lightly bat the [src]. ")
+
+/obj/structure/balloon/bat
+ name = "giant bat balloon"
+ desc = "A large balloon in the shape of a spooky bat with orange eyes."
+ icon_state = "batballoon"
+
+/obj/structure/balloon/ghost
+ name = "giant ghost balloon"
+ desc = "Oh no, it's a ghost! Oh wait, it's just a balloon. Phew!"
+ icon_state = "ghostballoon"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index 19eaf7f776..cbf03b4535 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -152,4 +152,4 @@
..(loc, "steel")
/obj/item/weapon/material/shard/phoron/New(loc)
- ..(loc, "phglass")
+ ..(loc, "borosilicate glass")
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index 034e37ff8e..7519525dd2 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -178,6 +178,7 @@
desc = "It doesn't seem all that secure. Oh well, it'll do."
icon = 'icons/obj/storage.dmi'
icon_state = "safe"
+ layer = ABOVE_WINDOW_LAYER
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
diff --git a/code/game/objects/items/weapons/surgery_tools_ch.dm b/code/game/objects/items/weapons/surgery_tools_ch.dm
new file mode 100644
index 0000000000..4d7fae7fa7
--- /dev/null
+++ b/code/game/objects/items/weapons/surgery_tools_ch.dm
@@ -0,0 +1,6 @@
+/obj/item/weapon/surgical/bioregen
+ name="bioregenerator"
+ desc="A special tool used in surgeries which can pull toxins from and restore oxygen to organic tissue as well as recreate missing biological structures to allow otherwise irreperable flesh to be mended."
+ icon='icons/obj/surgery_ch.dmi'
+ icon_state="bioregen"
+ drop_sound = 'sound/items/drop/scrap.ogg'
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
index b90a7961e2..9075c87272 100644
--- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
+++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
@@ -1380,6 +1380,36 @@
"glass" = COLOR_WHITE
)
+// Wall cabinets
+/decl/closet_appearance/wall_double
+ base_icon = 'icons/obj/closets/bases/wall_double.dmi'
+ decal_icon = 'icons/obj/closets/decals/wall_double.dmi'
+ decals = list(
+ "vent"
+ )
+ extra_decals = null
+
+/decl/closet_appearance/wall_double/kitchen
+ decals = null
+ color = COLOR_OFF_WHITE
+
+/decl/closet_appearance/wall_double/medical
+ decals = null
+ color = COLOR_OFF_WHITE
+ extra_decals = list(
+ "stripe_outer" = COLOR_BLUE_GRAY,
+ "stripe_inner" = COLOR_OFF_WHITE,
+ "cross" = COLOR_BLUE_GRAY
+ )
+
+/decl/closet_appearance/wall_double/fire_safety
+ color = COLOR_RED_LIGHT
+ decals = null
+ extra_decals = list(
+ "stripes" = COLOR_OFF_WHITE,
+ "glass" = COLOR_WHITE
+ )
+
// Carts
/decl/closet_appearance/cart
color = COLOR_GRAY20
diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
index 64f5a0fbd8..e395507702 100644
--- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm
+++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
@@ -10,7 +10,7 @@
anchored = 1
store_mobs = 0
-//spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar
+//spawns 2 sets of breathmask, emergency oxy tank and crowbar
/obj/structure/closet/walllocker/emerglocker
name = "emergency locker"
@@ -75,4 +75,109 @@
/obj/structure/closet/walllocker/medical/east
pixel_x = 32
- dir = EAST
\ No newline at end of file
+ dir = EAST
+//VOREStation Add End
+
+//double-size "cabinet" lockers, from Killian
+/obj/structure/closet/walllocker_double
+ desc = "A wall mounted storage cabinet."
+ name = "Wall Cabinet"
+ icon = 'icons/obj/closets/bases/wall_double.dmi'
+ closet_appearance = /decl/closet_appearance/wall_double
+ density = 0
+ anchored = 1
+ plane = TURF_PLANE
+ layer = ABOVE_TURF_LAYER
+
+/obj/structure/closet/walllocker_double/north
+ pixel_y = 32
+ dir = SOUTH
+
+/obj/structure/closet/walllocker_double/south
+ pixel_y = -32
+ dir = NORTH
+
+/obj/structure/closet/walllocker_double/west
+ pixel_x = -32
+ dir = WEST
+
+/obj/structure/closet/walllocker_double/east
+ pixel_x = 32
+ dir = EAST
+
+/obj/structure/closet/walllocker_double/kitchen
+ desc = "A wall mounted storage cabinet, for the kitchen. Now where's the flour gone..?"
+ name = "Kitchen Cabinet"
+ icon = 'icons/obj/closets/bases/wall_double.dmi'
+ closet_appearance = /decl/closet_appearance/wall_double/kitchen
+ density = 0
+ anchored = 1
+
+/obj/structure/closet/walllocker_double/kitchen/north
+ pixel_y = 32
+ dir = SOUTH
+
+/obj/structure/closet/walllocker_double/kitchen/south
+ pixel_y = -32
+ dir = NORTH
+
+/obj/structure/closet/walllocker_double/kitchen/west
+ pixel_x = -32
+ dir = WEST
+
+/obj/structure/closet/walllocker_double/kitchen/east
+ pixel_x = 32
+ dir = EAST
+
+/obj/structure/closet/walllocker_double/medical
+ name = "Medical Cabinet"
+ desc = "A wall mounted medical supply cabinet. Probably full of drugs!" //not actually full of drugs, sorry!
+ closet_appearance = /decl/closet_appearance/wall_double/medical
+
+/obj/structure/closet/walllocker_double/medical/north
+ pixel_y = 32
+ dir = SOUTH
+
+/obj/structure/closet/walllocker_double/medical/south
+ pixel_y = -32
+ dir = NORTH
+
+/obj/structure/closet/walllocker_double/medical/west
+ pixel_x = -32
+ dir = WEST
+
+/obj/structure/closet/walllocker_double/medical/east
+ pixel_x = 32
+ dir = EAST
+
+/obj/structure/closet/walllocker_double/hydrant
+ name = "fire-safety closet"
+ desc = "It's a storage cabinet packed with fire-fighting supplies."
+ closet_appearance = /decl/closet_appearance/wall_double/fire_safety
+ anchored = 1
+ density = 0
+ wall_mounted = 1
+
+ starts_with = list(
+ /obj/item/clothing/suit/fire/firefighter,
+ /obj/item/clothing/mask/gas,
+ /obj/item/device/flashlight,
+ /obj/item/weapon/tank/oxygen/red,
+ /obj/item/weapon/extinguisher,
+ /obj/item/clothing/head/hardhat/red)
+
+/obj/structure/closet/walllocker_double/hydrant/north
+ pixel_y = 32
+ dir = SOUTH
+
+/obj/structure/closet/walllocker_double/hydrant/south
+ pixel_y = -32
+ dir = NORTH
+
+/obj/structure/closet/walllocker_double/hydrant/west
+ pixel_x = -32
+ dir = WEST
+
+/obj/structure/closet/walllocker_double/hydrant/east
+ pixel_x = 32
+ dir = EAST
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index ed3669247a..a5717bdf6e 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -3,8 +3,7 @@
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
icon = 'icons/obj/closet.dmi'
icon_state = "extinguisher_closed"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
density = 0
var/obj/item/weapon/extinguisher/has_extinguisher
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index 2e2251fabe..bccdcf56c3 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -5,6 +5,7 @@
var/obj/item/weapon/material/twohanded/fireaxe/fireaxe
icon = 'icons/obj/closet.dmi' //Not bothering to move icons out for now. But its dumb still.
icon_state = "fireaxe1000"
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
density = 0
var/open = 0
diff --git a/code/game/objects/structures/flora/flora_vr.dm b/code/game/objects/structures/flora/flora_vr.dm
index 1050110cea..b7f722324c 100644
--- a/code/game/objects/structures/flora/flora_vr.dm
+++ b/code/game/objects/structures/flora/flora_vr.dm
@@ -41,59 +41,61 @@
/obj/structure/flora/log1
name = "waterlogged trunk"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A part of a felled tree. Moss is growing across it."
icon_state = "log1"
/obj/structure/flora/log2
- name = "waterlogged trunk"
+ name = "driftwood"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "Driftwood carelessly lost in the water."
icon_state = "log2"
/obj/structure/flora/lily1
- name = "waterlogged trunk"
+ name = "red flowered lilypads"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A bunch of lilypads. A beautiful red flower grows in the middle of them."
icon_state = "lilypad1"
/obj/structure/flora/lily2
- name = "waterlogged trunk"
+ name = "yellow flowered lilypads"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A few lilypads. A sunny yellow flower stems from the water and from between the lilypads."
icon_state = "lilypad2"
/obj/structure/flora/lily3
- name = "waterlogged trunk"
+ name = "lilypads"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A group of flowerless lilypads."
icon_state = "lilypad3"
/obj/structure/flora/smallbould
- name = "waterlogged trunk"
+ name = "small boulder"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A small boulder, with its top smothered with moss."
icon_state = "smallerboulder"
/obj/structure/flora/bboulder1
- name = "waterlogged trunk"
+ name = "large boulder"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "Small stones sit beside this large boulder. Moss grows on the top of each of them."
icon_state = "bigboulder1"
+ density = 1
/obj/structure/flora/bboulder2
- name = "waterlogged trunk"
+ name = "jagged large boulder"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "This boulder has had plates broken off it. Moss grows in the cracks and across the top."
icon_state = "bigboulder2"
+ density = 1
/obj/structure/flora/rocks1
- name = "waterlogged trunk"
+ name = "rocks"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A bunch of mossy rocks."
icon_state = "rocks1"
/obj/structure/flora/rocks2
- name = "waterlogged trunk"
+ name = "rocks"
icon = 'icons/obj/flora/amayastuff.dmi'
- desc = "A part of a felled tree. It is soaking up the water it is bouyant on."
+ desc = "A bunch of mossy rocks."
icon_state = "rocks2"
\ No newline at end of file
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 1473c8fe90..2af3c3ccce 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -4,6 +4,7 @@
desc = "A SalonPro Nano-Mirror(TM) brand mirror! The leading technology in hair salon products, utilizing nano-machinery to style your hair just right."
icon = 'icons/obj/watercloset.dmi'
icon_state = "mirror"
+ layer = ABOVE_WINDOW_LAYER
density = 0
anchored = 1
var/shattered = 0
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index 9306d062b0..21bb1c9e8a 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -146,6 +146,7 @@ var/list/flooring_types
flags = TURF_REMOVE_SHOVEL
icon = 'icons/turf/outdoors.dmi'
icon_base = "grass_sif"
+ build_type = /obj/item/stack/tile/grass/sif
has_base_range = 1
/decl/flooring/water
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 8feb63148c..9167d342ea 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -82,6 +82,7 @@
return
if (istype(A,/mob/living))
+ var/dirtslip = FALSE //CHOMPEdit
var/mob/living/M = A
if(M.lying || M.flying) //VOREStation Edit
return ..()
@@ -92,6 +93,7 @@
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
+ dirtslip = H.species.dirtslip //CHOMPEdit
// Tracking blood
var/list/bloodDNA = null
var/bloodcolor=""
@@ -117,7 +119,7 @@
bloodDNA = null
- if(src.wet)
+ if(src.wet || (dirtslip && (dirt > 50 || outdoors))) //CHOMPEdit
if(M.buckled || (src.wet == 1 && M.m_intent == "walk"))
return
@@ -125,7 +127,14 @@
var/slip_dist = 1
var/slip_stun = 6
var/floor_type = "wet"
-
+ //CHOMPEdit Begin
+ if(dirtslip)
+ slip_stun = 10
+ if(dirt > 50)
+ floor_type = "dirty"
+ else if(outdoors)
+ floor_type = "uneven"
+ //CHOMPEdit End
switch(src.wet)
if(2) // Lube
floor_type = "slippery"
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index b599c1fa6f..de4a2c7166 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -34,11 +34,6 @@
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
return
- //VOREStation Add - No talking during voting
- if(SSvote && SSvote.mode)
- to_chat(src, "OOC is not allowed during voting. ")
- return
- //VOREStation Add End
if(findtext(msg, "discord.gg") && !config.allow_discord_links)
to_chat(src, "Advertising discords is not allowed. ")
log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]")
diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm
index 28e00ab79d..a33611b459 100644
--- a/code/modules/admin/admin_verb_lists.dm
+++ b/code/modules/admin/admin_verb_lists.dm
@@ -109,6 +109,7 @@ var/list/admin_verbs_admin = list(
/datum/admins/proc/sendFax,
/client/proc/despawn_player,
/datum/admins/proc/view_feedback,
+ /client/proc/admin_teleport, //CHOMPEdit
/client/proc/setckey //YW add - readds SetCkey proc
)
@@ -360,6 +361,7 @@ var/list/admin_verbs_mod = list(
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
/datum/admins/proc/quick_nif, //CHOMPEdit
/datum/admins/proc/quick_authentic_nif, //CHOMPEdit
+ /client/proc/admin_teleport, //CHOMPEdit
/datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently,
)
diff --git a/code/modules/admin/verbs/admin_ch.dm b/code/modules/admin/verbs/admin_ch.dm
new file mode 100644
index 0000000000..775183e87c
--- /dev/null
+++ b/code/modules/admin/verbs/admin_ch.dm
@@ -0,0 +1,35 @@
+/client/proc/admin_teleport()
+ set name = "Admin teleport"
+ set category = "Admin"
+ set desc = "Teleports an atom to a set of coordinates or to the contents of another atom"
+
+ var/list/value = vv_get_value(VV_ATOM_REFERENCE)
+ if(!value["class"] || !value["value"])
+ return
+ var/atom/target = value["value"]
+ var/atom/destination
+ switch(alert("Would you like to teleport to a set of a coordinates, or to an atom?",,"coordinates","atom"))
+ if("coordinates")
+ var/list/inputlist = text2numlist(sanitize(input(usr,"Please input the coordinates, seperated by commas")),",")
+ var/list/coords = list()
+ for(var/content in inputlist)
+ if(content != null)
+ coords += content
+ if(coords.len>3)
+ alert("You entered too many coordinates! Only 3 are required.")
+ return
+ if(coords.len<3)
+ alert("You didn't enter enough coordinates! 3 are required.")
+ return
+ destination = locate(coords[1],coords[2],coords[3])
+ if(!destination)
+ alert("Invalid coordinates!")
+ return
+ if("atom")
+ value = vv_get_value(VV_ATOM_REFERENCE)
+ if(!value["class"] || !value["value"])
+ return
+ destination = value["value"]
+ new /datum/teleport/instant/admin(target,destination)
+/datum/teleport/instant/admin
+ local=FALSE
\ No newline at end of file
diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm
index 5cc16d06bc..4ce9dcf6fc 100644
--- a/code/modules/asset_cache/asset_list.dm
+++ b/code/modules/asset_cache/asset_list.dm
@@ -119,18 +119,14 @@ GLOBAL_LIST_EMPTY(asset_datums)
if (size[SPRSZ_STRIPPED])
continue
- #ifdef RUST_G
// save flattened version
var/fname = "data/spritesheets/[name]_[size_id].png"
fcopy(size[SPRSZ_ICON], fname)
- var/error = call(RUST_G, "dmi_strip_metadata")(fname)
+ var/error = rustg_dmi_strip_metadata(fname)
if(length(error))
stack_trace("Failed to strip [name]_[size_id].png: [error]")
size[SPRSZ_STRIPPED] = icon(fname)
fdel(fname)
- #else
- #warn It looks like you don't have RUST_G enabled. Without RUST_G, the RPD icons will not function, so it strongly recommended you reenable it.
- #endif
/datum/asset/spritesheet/proc/generate_css()
var/list/out = list()
diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm
index 673e273af0..4d3d499662 100644
--- a/code/modules/client/preference_setup/general/02_language.dm
+++ b/code/modules/client/preference_setup/general/02_language.dm
@@ -6,6 +6,14 @@
/datum/category_item/player_setup_item/general/language/load_character(var/savefile/S)
S["language"] >> pref.alternate_languages
S["language_prefixes"] >> pref.language_prefixes
+ //CHOMPEdit Begin
+ S["pos_traits"] >> pref.pos_traits
+ var/morelang = 0
+ for(var/trait in pref.pos_traits)
+ if(trait==/datum/trait/linguist)
+ morelang = 1
+ pref.num_languages = morelang * 12
+ //CHOMPEdit End
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
S["language"] << pref.alternate_languages
@@ -15,8 +23,8 @@
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
if(pref.species)
var/datum/species/S = GLOB.all_species[pref.species]
- if(S && pref.alternate_languages.len > S.num_alternate_languages)
- pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
+ if(S && pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
+ pref.alternate_languages.len = pref.numlanguage() // Truncate to allowed length CHOMPEdit
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
pref.language_prefixes = config.language_prefixes.Copy()
for(var/prefix in pref.language_prefixes)
@@ -30,14 +38,14 @@
. += "- [S.language] "
if(S.default_language && S.default_language != S.language)
. += "- [S.default_language] "
- if(S.num_alternate_languages)
+ if(pref.numlanguage()) //CHOMPEdit
if(pref.alternate_languages.len)
for(var/i = 1 to pref.alternate_languages.len)
var/lang = pref.alternate_languages[i]
. += "- [lang] - remove "
- if(pref.alternate_languages.len < S.num_alternate_languages)
- . += "- add ([S.num_alternate_languages - pref.alternate_languages.len] remaining) "
+ if(pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit
+ . += "- add ([pref.numlanguage() - pref.alternate_languages.len] remaining) " //CHOMPEdit
else
. += "- [pref.species] cannot choose secondary languages. "
@@ -51,7 +59,7 @@
return TOPIC_REFRESH
else if(href_list["add_language"])
var/datum/species/S = GLOB.all_species[pref.species]
- if(pref.alternate_languages.len >= S.num_alternate_languages)
+ if(pref.alternate_languages.len >= pref.numlanguage()) //CHOMPEdit
alert(user, "You have already selected the maximum number of alternate languages for this species!")
else
var/list/available_languages = S.secondary_langs.Copy()
@@ -69,7 +77,7 @@
alert(user, "There are no additional languages available to select.")
else
var/new_lang = input(user, "Select an additional language", "Character Generation", null) as null|anything in available_languages
- if(new_lang && pref.alternate_languages.len < S.num_alternate_languages)
+ if(new_lang && pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit
pref.alternate_languages |= new_lang
return TOPIC_REFRESH
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index e29b7d0a22..14f78b6e91 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -383,3 +383,7 @@
/datum/gear/head/rose_crown
display_name = "rose crown"
path = /obj/item/clothing/head/rose_crown
+
+/datum/gear/head/blackngoldheaddress
+ display_name = "black and gold headdress"
+ path = /obj/item/clothing/head/blackngoldheaddress
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
index 71c6f96140..e61ff84d6a 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
@@ -588,4 +588,29 @@
/datum/gear/uniform/cyberpunkharness
display_name = "cyberpunk strapped harness"
- path = /obj/item/clothing/under/cyberpunkharness
\ No newline at end of file
+ path = /obj/item/clothing/under/cyberpunkharness
+
+/datum/gear/uniform/whitegown
+ display_name = "white gown"
+ path = /obj/item/clothing/under/wedding/whitegown
+
+/datum/gear/uniform/floofdress
+ display_name = "floofy dress"
+ path = /obj/item/clothing/under/wedding/floofdress
+
+/datum/gear/uniform/floofdress/New()
+ ..()
+ gear_tweaks += gear_tweak_free_color_choice
+
+/datum/gear/uniform/blackngold
+ display_name = "black and gold gown"
+ path = /obj/item/clothing/under/blackngold
+
+/datum/gear/uniform/sheerblue
+ display_name = "sheer blue dress"
+ path = /obj/item/clothing/under/sheerblue
+
+/datum/gear/uniform/disheveled
+ display_name = "disheveled suit"
+ path = /obj/item/clothing/under/disheveled
+
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index e653166b7a..5d2baa08a8 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -264,7 +264,7 @@
if(pref.dirty_synth && instance.not_for_synths)//if you are a synth you can't take this trait.
alert("You cannot take this trait as a SYNTH.\
Please remove that trait, or pick another trait to add.","Error")
- pref.dirty_synth = 0 //Just to be sure
+ //pref.dirty_synth = 0 //Just to be sure // Commented out because it allow for someone to take a synth-blacklisted trait CHOMP Edit
return TOPIC_REFRESH
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 57cefffbcd..9b64a25f75 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -30,6 +30,7 @@ datum/preferences
var/tgui_lock = FALSE
//character preferences
+ var/num_languages = 0 //CHOMPEdit
var/real_name //our character's name
var/be_random_name = 0 //whether we are a random name every round
var/nickname //our character's nickname
@@ -154,8 +155,11 @@ datum/preferences
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
var/list/volume_channels = list()
-
-
+//CHOMPEdit Begin
+/datum/preferences/proc/numlanguage()
+ var/datum/species/S = GLOB.all_species[species]
+ return num_languages ? num_languages : S.num_alternate_languages
+//CHOMPEdit End
/datum/preferences/New(client/C)
player_setup = new(src)
set_biological_gender(pick(MALE, FEMALE))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index caf6d395f1..4b230053d9 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -735,6 +735,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING
var/blood_overlay_type = "suit"
+ blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood.
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
preserve_item = 1
diff --git a/code/modules/clothing/clothing_icons.dm b/code/modules/clothing/clothing_icons.dm
index 33e1da6000..2d4f00c665 100644
--- a/code/modules/clothing/clothing_icons.dm
+++ b/code/modules/clothing/clothing_icons.dm
@@ -29,6 +29,7 @@
/obj/item/clothing/suit/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
- var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = "[blood_overlay_type]blood")
+ blood_sprite_state = "[blood_overlay_type]blood"
+ var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index dff571c50f..dab5e97075 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -445,3 +445,10 @@
desc = "A gold-lined white cowl. It gives off uncomfortable cult vibes, but fancy."
icon_state = "whitecowl"
body_parts_covered = 0
+
+/obj/item/clothing/head/blackngoldheaddress
+ name = "black and gold headdress"
+ desc = "An odd looking headdress that covers the eyes."
+ icon_state = "blackngoldheaddress"
+ flags_inv = HIDEEYES
+ body_parts_covered = HEAD|EYES
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index cb736737c6..bdf2be889d 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -2,7 +2,7 @@
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear."
name = "magboots"
icon_state = "magboots0"
- item_flags = PHORONGUARD
+ flags = PHORONGUARD
item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots")
species_restricted = null
center_of_mass = list("x" = 17,"y" = 12)
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index cd65478a05..9606205cc4 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -11,6 +11,7 @@
name = "hardsuit control module"
icon = 'icons/obj/rig_modules.dmi'
desc = "A back-mounted hardsuit deployment and control mechanism."
+ flags = PHORONGUARD
slot_flags = SLOT_BACK
req_one_access = list()
req_access = list()
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index 82caf79deb..8ae8ca3674 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -23,7 +23,8 @@
/obj/item/clothing/gloves/gauntlets/rig
name = "gauntlets"
- item_flags = THICKMATERIAL|PHORONGUARD
+ flags = PHORONGUARD
+ item_flags = THICKMATERIAL
body_parts_covered = HANDS
heat_protection = HANDS
cold_protection = HANDS
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 7fb4df785e..20f33104ca 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -278,6 +278,7 @@
name = "armor vest"
desc = "A simple kevlar plate carrier."
icon_state = "kvest"
+ blood_overlay_type = "armor"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight,/obj/item/clothing/head/helmet)
@@ -311,6 +312,7 @@
name = "Warden's jacket"
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_jacket"
+ blood_overlay_type = "suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
flags_inv = HIDETIE|HIDEHOLSTER
@@ -332,6 +334,7 @@
name = "armored coat"
desc = "A greatcoat enhanced with a special alloy for some protection and style."
icon_state = "hos"
+ blood_overlay_type = "suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
flags_inv = HIDETIE|HIDEHOLSTER
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 1d4ba551d9..092f33fd86 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -603,6 +603,19 @@ obj/item/clothing/under/dress/yellowswoop
flags_inv = HIDESHOES
body_parts_covered = UPPER_TORSO|LOWER_TORSO
+/obj/item/clothing/under/wedding/floofdress
+ name = "floofy dress"
+ desc = "A lovely floofed out dress for formal occasions. Comes in many colors!"
+ icon_state = "floofdress"
+ flags_inv = HIDESHOES
+ index = 1
+
+/obj/item/clothing/under/wedding/whitegown
+ name = "white gown"
+ desc = "A elegant white gown with accents of sheer mesh."
+ icon_state = "whitegown"
+ index = 1
+
/*
Uniforms and such
*/
@@ -816,6 +829,24 @@ Uniforms and such
icon_state = "cyberhell"
index = 1
+/obj/item/clothing/under/blackngold
+ name = "black and gold gown"
+ desc = "A black and gold gown. You get the impression this is typically worn for religious purposes."
+ icon_state = "blackngold"
+ index = 1
+
+/obj/item/clothing/under/sheerblue
+ name = "sheer blue dress"
+ desc = "An entirely sheer blue dress. Best worn with something underneath!"
+ icon_state = "sheerblue"
+ index = 1
+
+/obj/item/clothing/under/disheveled
+ name = "disheveled suit"
+ desc = "What might pass as well maintained formal attire. If you're blind."
+ icon_state = "disheveled"
+ index = 1
+
/*
* swimsuit
*/
diff --git a/code/modules/food/drinkingglass/metaglass_vr.dm b/code/modules/food/drinkingglass/metaglass_vr.dm
index 887c752ba6..a718acf86d 100644
--- a/code/modules/food/drinkingglass/metaglass_vr.dm
+++ b/code/modules/food/drinkingglass/metaglass_vr.dm
@@ -123,6 +123,31 @@
glass_center_of_mass = list("x"=16, "y"=9)
glass_icon_file = 'icons/obj/drinks_vr.dmi'
+/datum/reagent/ethanol/originalsin
+ glass_icon_state = "originalsinglass"
+ glass_center_of_mass = list("x"=16, "y"=9)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/whiskeysour
+ glass_icon_state = "whiskeysourglass"
+ glass_center_of_mass = list("x"=16, "y"=9)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/newyorksour
+ glass_icon_state = "newyorksourglass"
+ glass_center_of_mass = list("x"=16, "y"=9)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/mudslide
+ glass_icon_state = "mudslideglass"
+ glass_center_of_mass = list("x"=16, "y"=9)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/windgarita
+ glass_icon_state = "windgaritaglass"
+ glass_center_of_mass = list("x"=16, "y"=9)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
/datum/reagent/drink/soda/kiraspecial
glass_icon_file = 'icons/obj/drinks_vr.dmi'
diff --git a/code/modules/food/recipe.dm b/code/modules/food/recipe.dm
index 9d36e7230c..0f5276ed67 100644
--- a/code/modules/food/recipe.dm
+++ b/code/modules/food/recipe.dm
@@ -208,7 +208,7 @@
var/obj/item/I = locate(i) in container
if (I && I.reagents)
I.reagents.trans_to_holder(buffer,I.reagents.total_volume)
- qdel(I)
+ qdel(I)
//Find fruits
if (fruit && fruit.len)
diff --git a/code/modules/food/recipe_dump.dm b/code/modules/food/recipe_dump.dm
index 45f4c3e4ae..df0e6874aa 100644
--- a/code/modules/food/recipe_dump.dm
+++ b/code/modules/food/recipe_dump.dm
@@ -12,7 +12,8 @@
var/datum/chemical_reaction/drinks/CR = new path()
drink_recipes[path] = list("Result" = CR.name,
"ResAmt" = CR.result_amount,
- "Reagents" = CR.required_reagents)
+ "Reagents" = CR.required_reagents,
+ "Catalysts" = CR.catalysts)
qdel(CR)
//////////////////////// FOOD
@@ -30,8 +31,10 @@
"Result" = "[res.name]",
"ResAmt" = "1",
"Reagents" = R.reagents,
+ "Catalysts" = list(),
"Fruit" = R.fruit,
"Ingredients" = R.items,
+ "Coating" = R.coating,
"Appliance" = R.appliance,
"Image" = result_icon
)
@@ -45,6 +48,7 @@
food_recipes[path] = list("Result" = CR.name,
"ResAmt" = CR.result_amount,
"Reagents" = CR.required_reagents,
+ "Catalysts" = CR.catalysts,
"Fruit" = list(),
"Ingredients" = list(),
"Image" = null)
@@ -54,8 +58,11 @@
//Items needs further processing into human-readability.
for(var/Rp in food_recipes)
var/working_ing_list = list()
+ food_recipes[Rp]["has_coatable_items"] = FALSE
for(var/I in food_recipes[Rp]["Ingredients"])
var/atom/ing = new I()
+ if(istype(ing, /obj/item/weapon/reagent_containers/food/snacks)) // only subtypes of this have a coating variable and are checked for it (fruit are a subtype of this, so there's a check for them too later)
+ food_recipes[Rp]["has_coatable_items"] = TRUE
//So now we add something like "Bread" = 3
if(ing.name in working_ing_list)
@@ -64,6 +71,8 @@
else
working_ing_list[ing.name] = 1
+ if(LAZYLEN(food_recipes[Rp]["Fruit"]))
+ food_recipes[Rp]["has_coatable_items"] = TRUE
food_recipes[Rp]["Ingredients"] = working_ing_list
//Reagents can be resolved to nicer names as well
@@ -77,6 +86,15 @@
var/amt = food_recipes[Rp]["Reagents"][rid]
food_recipes[Rp]["Reagents"] -= rid
food_recipes[Rp]["Reagents"][R_name] = amt
+ for(var/rid in food_recipes[Rp]["Catalysts"])
+ var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid]
+ if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran.
+ log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!"))
+ continue // This allows the dump to still continue, and it will skip the invalid recipes.
+ var/R_name = Rd.name
+ var/amt = food_recipes[Rp]["Catalysts"][rid]
+ food_recipes[Rp]["Catalysts"] -= rid
+ food_recipes[Rp]["Catalysts"][R_name] = amt
for(var/Rp in drink_recipes)
for(var/rid in drink_recipes[Rp]["Reagents"])
var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid]
@@ -87,6 +105,15 @@
var/amt = drink_recipes[Rp]["Reagents"][rid]
drink_recipes[Rp]["Reagents"] -= rid
drink_recipes[Rp]["Reagents"][R_name] = amt
+ for(var/rid in drink_recipes[Rp]["Catalysts"])
+ var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid]
+ if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran.
+ log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!"))
+ continue // This allows the dump to still continue, and it will skip the invalid recipes.
+ var/R_name = Rd.name
+ var/amt = drink_recipes[Rp]["Catalysts"][rid]
+ drink_recipes[Rp]["Catalysts"] -= rid
+ drink_recipes[Rp]["Catalysts"][R_name] = amt
//We can also change the appliance to its proper name.
for(var/Rp in food_recipes)
@@ -174,6 +201,20 @@
if(pretty_ing != "")
html += "
Ingredients: [pretty_ing] "
+ //Coating
+ if(!food_recipes[Rp]["has_coatable_items"])
+ html += "Coating: N/A, no coatable items "
+ // css can be used to style or hide these depending on the class. This has two classes
+ // coating and coating_not_applicable, which can each have styles applied.
+ else if(food_recipes[Rp]["Coating"] == -1)
+ html += "Coating: Optionally, any coating "
+ else if(isnull(food_recipes[Rp]["Coating"]))
+ html += "Coating: Must be uncoated "
+ else
+ var/coatingtype = food_recipes[Rp]["Coating"]
+ var/datum/reagent/coating = new coatingtype()
+ html += "Coating: [coating.name] "
+
//For each fruit
var/pretty_fru = ""
count = 0
@@ -192,6 +233,15 @@
if(pretty_rea != "")
html += "Mix in: [pretty_rea] "
+ //For each catalyst
+ var/pretty_cat = ""
+ count = 0
+ for(var/cat in food_recipes[Rp]["Catalysts"])
+ pretty_cat += "[count == 0 ? "" : ", "][food_recipes[Rp]["Catalysts"][cat]]u [cat]"
+ count++
+ if(pretty_cat != "")
+ html += "Catalysts: [pretty_cat] "
+
//Close ingredients
html += ""
//Close this row
@@ -230,6 +280,15 @@
if(pretty_rea != "")
html += "Mix together: [pretty_rea] "
+ //For each catalyst
+ var/pretty_cat = ""
+ count = 0
+ for(var/cat in drink_recipes[Rp]["Catalysts"])
+ pretty_cat += "[count == 0 ? "" : ", "][drink_recipes[Rp]["Catalysts"][cat]]u [cat]"
+ count++
+ if(pretty_cat != "")
+ html += "Catalysts: [pretty_cat] "
+
html += "Makes [drink_recipes[Rp]["ResAmt"]]u "
//Close reagents
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index 849b1a5a6e..4766f5c1ef 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -406,6 +406,7 @@ datum/unarmed_attack/holopugilism/unarmed_override(var/mob/living/carbon/human/u
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
+ layer = ABOVE_WINDOW_LAYER
var/ready = 0
var/area/currentarea = null
var/eventstarted = 0
diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm
index 39a1c30452..9556477f50 100644
--- a/code/modules/holomap/station_holomap.dm
+++ b/code/modules/holomap/station_holomap.dm
@@ -6,6 +6,7 @@
desc = "A virtual map of the surrounding station."
icon = 'icons/obj/machines/stationmap.dmi'
icon_state = "station_map"
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
density = 0
use_power = USE_POWER_IDLE
@@ -19,9 +20,6 @@
var/light_range_on = 2
light_color = "#64C864"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
-
var/mob/watching_mob = null
var/image/small_station_map = null
var/image/floor_markings = null
diff --git a/code/modules/hydroponics/seed_datums_ch.dm b/code/modules/hydroponics/seed_datums_ch.dm
index eb2fc5a8e9..87f211c679 100644
--- a/code/modules/hydroponics/seed_datums_ch.dm
+++ b/code/modules/hydroponics/seed_datums_ch.dm
@@ -1,3 +1,7 @@
+//Variables to make certain things work. Consider sending upstream.
+/datum/seed
+ var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them.
+
//////CHOMP PLANTS//////
/datum/seed/soybean/sapbean
@@ -150,13 +154,38 @@
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
+/datum/seed/pitcher_plant //Pitcher plant
+ name = "pitcher plant"
+ seed_name = "pitcher plant"
+ seed_noun = "pits"
+ display_name = "pitcher shoots"
+ can_self_harvest = 1
+ apply_color_to_mob = FALSE
+ has_mob_product = /mob/living/simple_mob/vore/pitcher_plant
+ ai_mob_product = 1
+
+/datum/seed/pitcher_plant/New() //No custom icons yet. No spread trait yet even though pitcher fruit can be planted outside of a tray as I've not tied that to hydroponics code.
+ ..()
+ set_trait(TRAIT_IMMUTABLE,1)
+ set_trait(TRAIT_CARNIVOROUS,1)
+ set_trait(TRAIT_MATURATION,8)
+ set_trait(TRAIT_PRODUCTION,6)
+ set_trait(TRAIT_WATER_CONSUMPTION,6)
+ set_trait(TRAIT_YIELD,1)
+ set_trait(TRAIT_POTENCY,10)
+ set_trait(TRAIT_PRODUCT_ICON,"corn")
+ set_trait(TRAIT_PRODUCT_COLOUR,"#a839a2")
+ set_trait(TRAIT_PLANT_COLOUR,"#5b6f43")
+ set_trait(TRAIT_PLANT_ICON,"ambrosia")
+
/datum/seed/hardlightseed //WIP: havent ported the mob and such yet, best someone more keen on these mobs does it - Jack
name = "Type NULL Hardlight Generator"
seed_name = "Biomechanical Hardlight generator seed"
display_name = "Biomechanical Hardlight stem"
mutants = null
can_self_harvest = 1
- has_mob_product = null
+ has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo
+ ai_mob_product = 1
/datum/seed/hardlightseed/New()
..()
diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm
index 8b5c4a56a1..68a6334d49 100644
--- a/code/modules/hydroponics/seed_mobs.dm
+++ b/code/modules/hydroponics/seed_mobs.dm
@@ -1,7 +1,7 @@
// The following procs are used to grab players for mobs produced by a seed (mostly for dionaea).
/datum/seed/proc/handle_living_product(var/mob/living/host)
- if(!host || !istype(host)) return
+ if(!host || !istype(host) || ai_mob_product) return //CHOMPedit: ai_mob_product var to allow ai mobs to spawn from plants.
if(apply_color_to_mob)
host.color = traits[TRAIT_PRODUCT_COLOUR]
diff --git a/code/modules/hydroponics/seed_packets_ch.dm b/code/modules/hydroponics/seed_packets_ch.dm
index 9c48fd6737..f18dea8ae8 100644
--- a/code/modules/hydroponics/seed_packets_ch.dm
+++ b/code/modules/hydroponics/seed_packets_ch.dm
@@ -1,3 +1,6 @@
/obj/item/seeds/teaseed
- seed_type = "tea"
\ No newline at end of file
+ seed_type = "tea"
+
+/obj/item/seeds/pitcherseed
+ seed_type = "pitcher plant"
\ No newline at end of file
diff --git a/code/modules/hydroponics/seed_storage_vr.dm b/code/modules/hydroponics/seed_storage_vr.dm
index fd8fdc73ae..3ba578e8c8 100644
--- a/code/modules/hydroponics/seed_storage_vr.dm
+++ b/code/modules/hydroponics/seed_storage_vr.dm
@@ -49,6 +49,7 @@
/obj/item/seeds/shrinkshroom = 3,
/obj/item/seeds/megashroom = 3)
+//CHOMPedit: adds pitcherseed
/obj/machinery/seed_storage/xenobotany
name = "Xenobotany seed storage"
scanner = list("stats", "produce", "soil", "temperature", "light")
@@ -106,4 +107,5 @@
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/shrinkshroom = 3,
/obj/item/seeds/megashroom = 3,
- /obj/item/seeds/lustflower = 2)
+ /obj/item/seeds/lustflower = 2,
+ /obj/item/seeds/pitcherseed = 3)
diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm
index db94bebd0d..34483acadd 100644
--- a/code/modules/hydroponics/spreading/spreading_growth.dm
+++ b/code/modules/hydroponics/spreading/spreading_growth.dm
@@ -127,6 +127,15 @@
child.anchored = 1
child.update_icon()
+ //CHOMPedit start: Pitcher plant spawning
+ if((seed.get_trait(TRAIT_POTENCY)) >= 70) //Random event spacevines have 70 potency minimum. Should guarantee this always triggers on spacevines.
+ var/mob/living/pitcher
+ if(!seed.get_trait(TRAIT_CARNIVOROUS) && prob(2)) //Check for canivorous or this could call if prob(10) above fails.
+ pitcher = new /mob/living/simple_mob/vore/pitcher_plant(src.loc)
+ pitcher.nutrition = 0 //With 0 nutrition, vine-spawned pitchers should die after ~10 minutes
+ pitcher.adjustToxLoss(170) //Reduce health, 200 is excessive when a lot of these are spawning.
+ //CHOMPedit end
+
//see if anything is there
for(var/thing in child.loc)
if(thing != child && istype(thing, /obj/effect/plant))
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 1ac41ce60f..eb5d6aba26 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -1,3 +1,5 @@
+#define AGE_MOD_MAX 10 //CHOMPedit: Define for age_mod sanity check as a define to allow for easy tweaking.
+
/obj/machinery/portable_atmospherics/hydroponics
name = "hydroponics tray"
desc = "A tray usually full of fluid for growing plants."
@@ -29,6 +31,7 @@
var/toxins = 0 // Toxicity in the tray?
var/mutation_level = 0 // When it hits 100, the plant mutates.
var/tray_light = 1 // Supplied lighting.
+ var/age_mod = 0 //CHOMPedit: Variable for chems which speed up plant growth. On average, every 3 age mod reduces growing time by 2.5 minutes.
// Mechanical concerns.
var/health = 0 // Plant health.
@@ -132,6 +135,12 @@
"mutagen" = 15
)
+ //CHOMPedit: Reagents which double plant growth speed.
+ var/static/list/age_reagents = list(
+ "pitcher_nectar" = 1
+ )
+ //CHOMPedit end
+
/obj/machinery/portable_atmospherics/hydroponics/AltClick(var/mob/living/user)
if(!istype(user))
return
@@ -286,6 +295,11 @@
else if(toxic_reagents[R.id])
toxins += toxic_reagents[R.id] * reagent_total
+ //CHOMPedit: Agents which speed up plant growth
+ if(age_reagents[R.id])
+ age_mod += age_reagents[R.id] * reagent_total
+ //CHOMPedit end
+
//Handle some general level adjustments. These values are independent of plants existing.
if(weedkiller_reagents[R.id])
weedlevel -= weedkiller_reagents[R.id] * reagent_total
@@ -337,6 +351,7 @@
age = 0
sampled = 0
mutation_mod = 0
+ age_mod = 0 //CHOMPedit
check_health()
return
@@ -355,6 +370,7 @@
age = 0
yield_mod = 0
mutation_mod = 0
+ age_mod = 0 //CHOMPedit
to_chat(user, "You remove the dead plant.")
lastproduce = 0
@@ -371,6 +387,7 @@
dead = 0
age = 0
+ age_mod = 0 //CHOMPedit
health = seed.get_trait(TRAIT_ENDURANCE)
lastcycle = world.time
harvest = 0
@@ -447,6 +464,7 @@
pestlevel = max(0,min(pestlevel,10))
weedlevel = max(0,min(weedlevel,10))
toxins = max(0,min(toxins,10))
+ age_mod = max(0,min(age_mod,AGE_MOD_MAX)) //CHOMPedit: age_mod sanity check
/obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species()
@@ -682,3 +700,5 @@
closed_system = !closed_system
to_chat(user, "You [closed_system ? "close" : "open"] the tray's lid.")
update_icon()
+
+#undef AGE_MOD_MAX //CHOMPedit
\ No newline at end of file
diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm
index 44f40b74fd..b61bb28bd9 100644
--- a/code/modules/hydroponics/trays/tray_process.dm
+++ b/code/modules/hydroponics/trays/tray_process.dm
@@ -38,7 +38,11 @@
return
// Advance plant age.
- if(prob(30)) age += 1 * HYDRO_SPEED_MULTIPLIER
+ if(prob(30)) //CHOMPedit start: I have to push the age increase down for a line for this to work with the compiler.
+ age += 1 * HYDRO_SPEED_MULTIPLIER
+ if(age_mod >= 1) //Age reagents double the speed of plant growth in sufficient quantities
+ age += 1 * HYDRO_SPEED_MULTIPLIER
+ age_mod -= 1 //CHOMPedit end
//Highly mutable plants have a chance of mutating every tick.
if(seed.get_trait(TRAIT_IMMUTABLE) == -1)
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 32d47681c3..da315f2493 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -8,6 +8,7 @@
name = "production machine console"
icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "console"
+ layer = ABOVE_WINDOW_LAYER
density = TRUE
anchored = TRUE
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index c1d6c4ee4c..fdabc49e7d 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -4,6 +4,7 @@
name = "stacking machine console"
icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "console"
+ layer = ABOVE_WINDOW_LAYER
density = 1
anchored = 1
var/obj/machinery/mineral/stacking_machine/machine = null
diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
index 0ab8381002..ccdb94b09d 100644
--- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
@@ -91,7 +91,7 @@
EQUIPMENT("Fine Excavation Kit - Measuring Tape", /obj/item/device/measuring_tape, 125),
EQUIPMENT("Fine Excavation Kit - Hand Pick", /obj/item/weapon/pickaxe/hand, 375),
EQUIPMENT("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic/locked, 1500),
- EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 3000),
+ EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000),
EQUIPMENT("Industrial Equipment - Inducer", /obj/item/weapon/inducer, 900),
EQUIPMENT("Industrial Equipment - Sheet-Snatcher", /obj/item/weapon/storage/bag/sheetsnatcher, 500),
)
diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
index eaf5667094..ac050b367d 100644
--- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
@@ -54,7 +54,7 @@
EQUIPMENT("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15),
EQUIPMENT("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50),
EQUIPMENT("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100),
- EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 300),
+ EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 300),
EQUIPMENT("Industrial Equipment - Inducer", /obj/item/weapon/inducer, 90),
EQUIPMENT("Laser Pointer", /obj/item/device/laser_pointer, 90),
EQUIPMENT("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310),
diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm
index 025543807d..f9bfecb6e6 100644
--- a/code/modules/mob/language/station_vr.dm
+++ b/code/modules/mob/language/station_vr.dm
@@ -134,6 +134,16 @@
"roar", "hyaa", "ma", "ha", "ya", "shi", "yo", "go"
)
+/datum/language/spacer
+ name = LANGUAGE_SPACER
+ desc = "A rough pidgin-language comprised of Tradeband, Gutter, and Sol Common used by various space-born communities unique to Humanity."
+ key = "J"
+ syllables = list(
+ "ada", "zir", "bian", "ach", "usk", "ado", "ich", "cuan", "iga", "qing", "le", "que", "ki", "qaf", "dei", "eta"
+ )
+ colour = "spacer"
+ machine_understands = TRUE
+
/datum/language/unathi
flags = 0
/datum/language/tajaran
diff --git a/code/modules/mob/living/bot/SLed209bot.dm b/code/modules/mob/living/bot/SLed209bot.dm
index fa17b05696..c4fd4b2767 100644
--- a/code/modules/mob/living/bot/SLed209bot.dm
+++ b/code/modules/mob/living/bot/SLed209bot.dm
@@ -21,6 +21,7 @@
xeno_harm_strength = 9
req_one_access = list(access_research, access_robotics)
botcard_access = list(access_research, access_robotics, access_xenobiology, access_xenoarch, access_tox, access_tox_storage, access_maint_tunnels)
+ retaliates = FALSE
var/xeno_stun_strength = 6
/mob/living/bot/secbot/ed209/slime/update_icons()
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index 06ab067ab0..f5fd98615f 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -24,6 +24,7 @@
var/declare_arrests = FALSE // If true, announces arrests over sechuds.
var/threat = 0 // How much of a threat something is. Set upon acquiring a target.
var/attacked = FALSE // If true, gives the bot enough threat assessment to attack immediately.
+ var/retaliates = TRUE //If this type of secbot should retaliate at all - so that slime securitrons don't go ballistic the second they get glomped.
var/is_ranged = FALSE
var/awaiting_surrender = 0
@@ -64,6 +65,7 @@
desc = "A little security robot, with a slime baton subsituted for the regular one."
default_icon_state = "slimesecbot"
stun_strength = 10 // Slimebatons aren't meant for humans.
+ retaliates = FALSE // No, you're not allowed to beat the slimes to death just because they scratched you.
xeno_harm_strength = 9 // Weaker than regular slimesky but they can stun.
baton_glow = "#33CCFF"
@@ -194,7 +196,7 @@
..()
/mob/living/bot/secbot/proc/react_to_attack(mob/attacker)
- if(!on) // We don't want it to react if it's off
+ if(!on || !retaliates) // We don't want it to react if it's off or doesn't care
return
if(!target)
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index ade8c9cb26..4953ec72c3 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -694,13 +694,11 @@
if(!muzzled)
message = "[species.scream_verb]!"
m_type = 2
- //CHOMPStation Edit Start. Uncommented block. Why was it commented in the first place?
- //The offending content was commented out as well anyway.
- if(get_gender() == FEMALE)
- playsound(src, "[species.female_scream_sound]", 80, 1)
+ if(get_gender() == FEMALE) //CHOMPedit start : fixed scream sounds by giving them the ability to grab from a list, and a way to turn them off in preferences
+ playsound(src, pick(species.female_scream_sound), 80, preference = /datum/client_preference/emote_noises)
else
- playsound(src, "[species.male_scream_sound]", 80, 1) //default to male screams if no gender is present.
- //CHOMPStation Edit End.
+ playsound(src, pick(species.male_scream_sound), 80, preference = /datum/client_preference/emote_noises) //default to male screams if no gender is present.
+ //CHOMPedit end
else
message = "makes a very loud noise."
m_type = 2
diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm
index 805a71af23..5e8341ac0a 100644
--- a/code/modules/mob/living/carbon/human/emote_vr.dm
+++ b/code/modules/mob/living/carbon/human/emote_vr.dm
@@ -269,3 +269,17 @@
set desc = "Switch tail layer on top."
tail_alt = !tail_alt
update_tail_showing()
+
+/mob/living/carbon/human/verb/hide_wings_vr()
+ set name = "Show/Hide wings"
+ set category = "IC"
+ set desc = "Hide your wings, or show them if you already hid them."
+ wings_hidden = !wings_hidden
+ update_wing_showing()
+ var/message = ""
+ if(!wings_hidden)
+ message = "reveals their wings!"
+ else
+ message = "hides their wings."
+ visible_message("[src] [message]")
+
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 5130060738..42d91f46bf 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -284,7 +284,7 @@
var/list/vorestrings = list()
vorestrings += examine_weight()
vorestrings += examine_nutrition()
- vorestrings += examine_reagent_bellies() //CHOMP reagent bellies
+// vorestrings += examine_reagent_bellies() //CHOMP reagent bellies
vorestrings += examine_bellies()
vorestrings += examine_pickup_size()
vorestrings += examine_step_size()
diff --git a/code/modules/mob/living/carbon/human/human_defines_ch.dm b/code/modules/mob/living/carbon/human/human_defines_ch.dm
index 69dfc3a7ea..10855c4bd7 100644
--- a/code/modules/mob/living/carbon/human/human_defines_ch.dm
+++ b/code/modules/mob/living/carbon/human/human_defines_ch.dm
@@ -1,2 +1,4 @@
/mob/living/carbon/human
- var/gender_change_cooldown = 0 // A cooldown for gender and gender indentify changing procs to make it easy to avoid spam of gender change
\ No newline at end of file
+ var/gender_change_cooldown = 0 // A cooldown for gender and gender indentify changing procs to make it easy to avoid spam of gender change
+ var/loneliness_stage = 0
+ var/next_loneliness_time = 0
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm
index 9316b90e88..3a52565d08 100644
--- a/code/modules/mob/living/carbon/human/human_defines_vr.dm
+++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm
@@ -9,6 +9,7 @@
var/impersonate_bodytype //For impersonating a bodytype
var/ability_flags = 0 //Shadekin abilities/potentially other species-based?
var/sensorpref = 5 //Suit sensor loadout pref
+ var/wings_hidden = FALSE
/mob/living/carbon/human/proc/shadekin_get_energy()
var/datum/species/shadekin/SK = species
@@ -48,4 +49,4 @@
if(!istype(SK))
return 0
- SK.set_energy(src, SK.get_energy(src) + amount)
\ No newline at end of file
+ SK.set_energy(src, SK.get_energy(src) + amount)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index a7678647d8..ed7508d511 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -257,12 +257,12 @@
// Play every 20 steps while walking, for the sneak
if(m_intent == "walk" && step_count++ % 20 != 0)
- check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
+// check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
return
// Play every other step while running
if(m_intent == "run" && step_count++ % 2 != 0)
- check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
+// check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
return
var/volume = config.footstep_volume
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index fbf1b76b90..8733d22c2f 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -950,7 +950,14 @@
take_overall_damage(1,1)
else //heal in the dark
heal_overall_damage(1,1)
-
+ //CHOMPEdit Begin
+ if(species.photosynthesizing && nutrition < 1000)
+ var/light_amount = 0
+ if(isturf(loc))
+ var/turf/T = loc
+ light_amount = T.get_lumcount() / 10
+ adjust_nutrition(light_amount)
+ //CHOMPEdit End
// nutrition decrease
if (nutrition > 0 && stat != DEAD)
var/nutrition_reduction = species.hunger_factor
@@ -958,6 +965,11 @@
for(var/datum/modifier/mod in modifiers)
if(!isnull(mod.metabolism_percent))
nutrition_reduction *= mod.metabolism_percent
+ //CHOMPEdit Begin
+ if(nutrition > 1000 && species.grows && size_multiplier < RESIZE_HUGE)
+ nutrition_reduction *= 5
+ resize(min(size_multiplier+0.004,RESIZE_HUGE))
+ //CHOMPEdit End
adjust_nutrition(-nutrition_reduction)
if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises.
diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
index dd03ab4bbc..8e129555b0 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
@@ -12,6 +12,9 @@
has_organ = list()
siemens_coefficient = 0
+ male_scream_sound = null //CHOMPedit It has no mouth yet it must scream
+ female_scream_sound = null //CHOMPedit
+
blood_color = "#CCCCCC"
flesh_color = "#AAAAAA"
diff --git a/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm b/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
index d8a5577e37..ebc5237c08 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
@@ -15,6 +15,9 @@
spawn_flags = SPECIES_IS_RESTRICTED
appearance_flags = null
+ male_scream_sound = null //CHOMPedit Screaming skeletons would be funny, but needs better sounds
+ female_scream_sound = null //CHOMPedit
+
show_ssd = null
blood_volume = null
diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
index 26334da161..247ac126b9 100644
--- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
+++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm
@@ -22,6 +22,9 @@
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin)
rarity_value = 15 //INTERDIMENSIONAL FLUFFERS
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
siemens_coefficient = 0
darksight = 10
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index c33adc7821..d6f7e4e133 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -75,8 +75,8 @@
//Soundy emotey things.
var/scream_verb = "screams"
- var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
- var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
+ var/male_scream_sound = list('sound/effects/mob_effects/m_scream_1.ogg','sound/effects/mob_effects/m_scream_2.ogg','sound/effects/mob_effects/m_scream_3.ogg','sound/effects/mob_effects/m_scream_4.ogg') //CHOMpedit start : Added tgstation screams
+ var/female_scream_sound = list('sound/effects/mob_effects/f_scream_1.ogg','sound/effects/mob_effects/f_scream_2.ogg','sound/effects/mob_effects/f_scream_3.ogg','sound/effects/mob_effects/f_scream_4.ogg') //CHOMPedit end
var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
var/female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg')
var/male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg'
diff --git a/code/modules/mob/living/carbon/human/species/species_ch.dm b/code/modules/mob/living/carbon/human/species/species_ch.dm
new file mode 100644
index 0000000000..f0eee8ffca
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/species_ch.dm
@@ -0,0 +1,10 @@
+/datum/species
+ var/list/env_traits = list()
+ var/dirtslip = FALSE
+ var/photosynthesizing = FALSE
+ var/grows = FALSE
+
+/datum/species/handle_environment_special(var/mob/living/carbon/human/H)
+ for(var/datum/trait/env_trait in env_traits)
+ env_trait.handle_environment_special(H)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm
index 8353d36cba..fe5638a0e2 100644
--- a/code/modules/mob/living/carbon/human/species/station/alraune.dm
+++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm
@@ -16,6 +16,9 @@
base_species = SPECIES_ALRAUNE
selects_bodytype = TRUE
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
body_temperature = T20C
breath_type = "oxygen"
poison_type = "phoron"
diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
index 6fd2e5db2d..edcadfc1bd 100644
--- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm
@@ -22,6 +22,9 @@
you select and set this species as your species. Please look at the VORE tab if you select this species."
catalogue_data = list(/datum/category_item/catalogue/fauna/custom_species)
+ male_scream_sound = null //CHOMPedit These are going to be a hassle for custom species if not null
+ female_scream_sound = null //CHOMPedit
+
name_language = null // Use the first-name last-name generator rather than a language scrambler
min_age = 18
max_age = 200
diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm
index d2bc9dc1dd..76b5fb7c38 100644
--- a/code/modules/mob/living/carbon/human/species/station/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/station/golem.dm
@@ -11,6 +11,9 @@
spawn_flags = SPECIES_IS_RESTRICTED
siemens_coefficient = 0
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
assisted_langs = list()
breath_type = null
diff --git a/code/modules/mob/living/carbon/human/species/station/greyYW.dm b/code/modules/mob/living/carbon/human/species/station/greyYW.dm
index 3922c442a7..cf832eca3e 100644
--- a/code/modules/mob/living/carbon/human/species/station/greyYW.dm
+++ b/code/modules/mob/living/carbon/human/species/station/greyYW.dm
@@ -27,7 +27,8 @@
darksight = 5
reagent_tag = IS_GREY
-
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
min_age = 18
max_age = 130
diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm
index 587f4d918d..8941847b20 100644
--- a/code/modules/mob/living/carbon/human/species/station/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm
@@ -22,6 +22,9 @@
tail = "chimptail"
fire_icon_state = "monkey"
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws)
inherent_verbs = list(/mob/living/proc/ventcrawl)
hud_type = /datum/hud_data/monkey
diff --git a/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm b/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm
index f8a783b162..583d7798db 100644
--- a/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/monkey_vr.dm
@@ -6,6 +6,8 @@
tail = null //The tail is part of its body due to tail using the "icons/effects/species.dmi" file. It must be null, or they'll have a chimp tail.
greater_form = "Akula"
default_language = "Skrellian" //Closest we have.
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
/datum/species/monkey/sergal
name = SPECIES_MONKEY_SERGAL
@@ -14,6 +16,8 @@
deform = 'icons/mob/human_races/monkeys/r_sergaling_vr.dmi'
tail = null
default_language = LANGUAGE_SAGARU
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
/datum/species/monkey/sparra
name = SPECIES_MONKEY_NEVREAN
@@ -23,6 +27,8 @@
icobase = 'icons/mob/human_races/monkeys/r_sparra_vr.dmi'
deform = 'icons/mob/human_races/monkeys/r_sparra_vr.dmi'
default_language = LANGUAGE_BIRDSONG
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
/* Example from Polaris code
@@ -52,6 +58,8 @@
flesh_color = "#966464"
base_color = "#000000"
tail = null
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
//INSERT CODE HERE SO MONKEYS CAN BE SPAWNED.
//Also, M was added to the end of the spawn names to signify that it's a monkey, since some names were conflicting.
diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
index 91ff9cee1f..92cba4c86c 100644
--- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
@@ -49,6 +49,9 @@ var/datum/species/shapeshifter/promethean/prometheans
economic_modifier = 3
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
gluttonous = 1
virus_immune = 1
blood_volume = 560
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
index 2bda0f27a7..d7b870bcb9 100755
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
@@ -26,6 +26,9 @@
breath_type = null
poison_type = null
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
virus_immune = 1
blood_volume = 0
min_age = 18
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 93fb433433..6c77578421 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -80,6 +80,8 @@
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN
+ body_temperature = 270
+
cold_level_1 = 180 //Default 260
cold_level_2 = 130 //Default 200
cold_level_3 = 70 //Default 120
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 208ff6d9a9..dbf768ae9f 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -76,6 +76,9 @@
max_age = 260
economic_modifier = 10
+
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
blurb = "A heavily reptillian species, Unathi hail from the \
Uuosa-Eso system, which roughly translates to 'burning mother'. Coming from a harsh, inhospitable \
@@ -191,6 +194,9 @@
economic_modifier = 10
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "The Tajaran are a mammalian species resembling roughly felines, hailing from Meralar in the Rarkajar system. \
While reaching to the stars independently from outside influences, the humans engaged them in peaceful trade contact \
and have accelerated the fledgling culture into the interstellar age. Their history is full of war and highly fractious \
@@ -198,7 +204,7 @@
home worlds and speak a variety of languages, especially Siik and Akhani."
catalogue_data = list(/datum/category_item/catalogue/fauna/tajaran)
- body_temperature = 320.15 //Even more cold resistant, even more flammable
+ body_temperature = 280.15 //Even more cold resistant, even more flammable
cold_level_1 = 200 //Default 260
cold_level_2 = 140 //Default 200
@@ -235,7 +241,7 @@
"Your overheated skin itches."
)
- cold_discomfort_level = 275
+ cold_discomfort_level = 215
has_organ = list( //No appendix.
O_HEART = /obj/item/organ/internal/heart,
@@ -280,6 +286,9 @@
economic_modifier = 10
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
darksight = 4
flash_mod = 1.2
chemOD_mod = 0.9
@@ -358,6 +367,9 @@
min_age = 16
max_age = 90
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "The Zaddat are an Unathi client race only recently introduced to SolGov space. Having evolved on \
the high-pressure and post-apocalyptic world of Xohok, Zaddat require an environmental suit called a Shroud \
to survive in usual planetary and station atmospheres. Despite these restrictions, worsening conditions on \
@@ -470,6 +482,9 @@
economic_modifier = 10
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
index bc54d328c1..579c4314e2 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
@@ -38,6 +38,9 @@
min_age = 18
max_age = 80
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Some amalgamation of different species from across the universe,with extremely unstable DNA, making them unfit for regular cloners. \
Widely known for their voracious nature and violent tendencies when stressed or left unfed for long periods of time. \
Most, if not all chimeras possess the ability to undergo some type of regeneration process, at the cost of energy."
@@ -381,6 +384,9 @@
min_age = 18
max_age = 80
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Vasilissans are a tall, lanky, spider like people. \
Each having four eyes, an extra four, large legs sprouting from their back, and a chitinous plating on their body, and the ability to spit webs \
from their mandible lined mouths. They are a recent discovery by Nanotrasen, only being discovered roughly seven years ago. \
@@ -451,6 +457,9 @@
min_age = 18
max_age = 200
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Big buff werewolves. These are a limited functionality event species that are not balanced for regular gameplay. Adminspawn only."
wikilink="N/A"
diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
index 72be3e3d38..413ab70873 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
@@ -19,6 +19,9 @@
min_age = 18
max_age = 110
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "There are two subspecies of Sergal; Southern and Northern. Northern sergals are a highly aggressive race \
that lives in the plains and tundra of their homeworld. They are characterized by long, fluffy fur bodies with cold colors; \
usually with white abdomens, somewhat short ears, and thick faces. Southern sergals are much more docile and live in the \
@@ -85,6 +88,9 @@
min_age = 18
max_age = 110
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "The Akula are a species of amphibious humanoids like the Skrell, but have an appearance very similar to that of a shark. \
They were first discovered as a primitive race of underwater dwelling tribal creatures by the Skrell. At first they were not believed \
to be noteworthy, but the Akula proved to be such swift and clever learners that the Skrell reclassified them as sentients. Allegedly, \
@@ -132,6 +138,9 @@
min_age = 18
max_age = 110
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Nevreans are a race of avian and dinosaur-like creatures living on Tal. They belong to a group of races that hails from Eltus, \
in the Vilous system. Unlike sergals whom they share a star system with, their species is a very peaceful one. They possess remarkable \
intelligence and very skillful hands that are put use for constructing precision instruments, but tire-out fast when repeatedly working \
@@ -174,6 +183,9 @@
min_age = 18
max_age = 110
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "The fox-like Zorren are native to Virgo-Prime, however there are two distinct varieties of Zorren one with large ears and shorter fur, \
and the other with longer fur that is a bit more vibrant. The long-eared, short-furred Zorren have come to be known as Flatland Zorren as that \
is where most of their settlements are located. The Flatland Zorren are somewhat tribal and shamanistic as they have only recently started to be \
@@ -221,6 +233,9 @@
color_mult = 1
inherent_verbs = list(/mob/living/proc/shred_limb, /mob/living/carbon/human/proc/lick_wounds)
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
@@ -386,6 +401,9 @@ datum/species/harpy
base_color = "#EECEB3"
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
blurb = "An Avian species, coming from a distant planet, the Rapalas are the very proud race.\
Sol researchers have commented on them having a very close resemblance to the mythical race called 'Harpies',\
who are known for having massive winged arms and talons as feet. They've been clocked at speeds of over 35 miler per hour chasing the planet's many fish-like fauna.\
@@ -413,6 +431,8 @@ datum/species/harpy
deform = 'icons/mob/human_races/r_shadekin_vr.dmi'
tail = "tail"
icobase_tail = 1
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
blurb = "Very little is known about these creatures. They appear to be largely mammalian in appearance. \
Seemingly very rare to encounter, there have been widespread myths of these creatures the galaxy over, \
but next to no verifiable evidence to their existence. However, they have recently been more verifiably \
@@ -537,6 +557,9 @@ datum/species/harpy
min_age = 18
max_age = 80
+ male_scream_sound = null //CHOMPedit
+ female_scream_sound = null //CHOMPedit
+
//primitive_form = "" //We don't have fennec-monkey sprites.
spawn_flags = SPECIES_IS_RESTRICTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
@@ -568,6 +591,9 @@ datum/species/harpy
min_age = 18
max_age = 80
+ male_scream_sound = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg') //CHOMPedit Scree
+ female_scream_sound = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg') //CHOMPedit
+
blurb = "Xenomorphs hybrids are a mixture of xenomorph DNA and some other humanoid species. \
Xenomorph hyrids mostly have had had their natural aggression removed due to the gene modification process \
although there are some exceptions, such as when they are harmed. Most xenomorph hybrids are female, due to their natural xenomorph genes, \
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm
new file mode 100644
index 0000000000..ac04d2be3c
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm
@@ -0,0 +1,123 @@
+/datum/trait/hollow
+ excludes = list(/datum/trait/densebones)
+
+/datum/trait/slipperydirt
+ name = "Dirt Vulnerability"
+ desc = "Even the tiniest particles of dirt give you uneasy footing, even through several layers of footwear."
+ cost = -5
+ var_changes = list("dirtslip" = TRUE)
+
+/datum/trait/lonely
+ name = "Minor loneliness vulnerability"
+ desc = "You're very prone to loneliness! Being alone for extended periods of time causes adverse effects. Most mobs will cure this loneliness as long as they aren't hostile."
+ var/warning_cap = 400
+ var/only_people = FALSE
+ var/hallucination_cap = 25
+ var/escalation_speed = 0.8
+ cost = -2
+ special_env = TRUE
+ excludes = list(/datum/trait/lonely/major)
+
+/datum/trait/lonely/major
+ name = "Major loneliness vulnerability"
+ desc = "You're extremely prone to loneliness! Being alone for extended periods of time causes adverse effects. Most mobs won't be enough to cure this loneliness, you need other social beings."
+ warning_cap = 300
+ hallucination_cap = 50
+ escalation_speed = 1.3
+ only_people = TRUE
+ cost = -5
+ special_env = TRUE
+ excludes = list(/datum/trait/lonely)
+
+/datum/trait/lonely/proc/check_mob_company(var/mob/living/carbon/human/H,var/mob/living/M)
+ if(only_people && !istype(M, /mob/living/carbon) && !istype(M, /mob/living/silicon/robot))
+ return 0
+ if(M == H || M.stat == DEAD || M.invisibility > H.see_invisible)
+ return 0
+ if(only_people && !M.ckey)
+ return 0
+ if(M.faction == "neutral" || M.faction == H.faction)
+ if(H.loneliness_stage > 0)
+ H.loneliness_stage -= 4
+ if(H.loneliness_stage < 0)
+ H.loneliness_stage = 0
+ if(world.time >= H.next_loneliness_time)
+ to_chat(H, "The nearby company calms you down...")
+ H.next_loneliness_time = world.time+500
+ return 1
+ else
+ if(M.vore_organs)
+ for(var/obj/belly/B in M.vore_organs)
+ for(var/mob/living/content in B.contents)
+ if(istype(content))
+ check_mob_company(H,content)
+ return 0
+
+/datum/trait/lonely/handle_environment_special(var/mob/living/carbon/human/H)
+ spawn(0)
+ // If they're dead or unconcious they're a bit beyond this kind of thing.
+ if(H.stat)
+ return
+ // No point processing if we're already stressing the hell out.
+ if(H.hallucination >= hallucination_cap && H.loneliness_stage >= warning_cap)
+ return
+ // Vored? Not gonna get frightened.
+ if(isbelly(H.loc))
+ if(H.loneliness_stage > 0)
+ H.loneliness_stage -= 4
+ return
+ if(istype(H.loc, /obj/item/weapon/holder))
+ if(H.loneliness_stage > 0)
+ H.loneliness_stage -= 4
+ return
+ // Check for company.
+ for(var/mob/living/M in viewers(H))
+ if(check_mob_company(H,M))
+ return
+ if(H.vore_organs)
+ for(var/obj/belly/B in H.vore_organs)
+ for(var/mob/living/content in B.contents)
+ if(istype(content))
+ if(check_mob_company(H,content))
+ return
+ for(var/obj/item/weapon/holder/micro/M in range(1, H))
+ if(H.loneliness_stage > 0)
+ H.loneliness_stage -= 4
+ if(H.loneliness_stage < 0)
+ H.loneliness_stage = 0
+ if(world.time >= H.next_loneliness_time)
+ to_chat(H, "[M] calms you down...")
+ H.next_loneliness_time = world.time+500
+ for(var/obj/effect/overlay/aiholo/A in range(5, H))
+ if(H.loneliness_stage > 0)
+ H.loneliness_stage -= 4
+ if(H.loneliness_stage < 0)
+ H.loneliness_stage = 0
+ if(world.time >= H.next_loneliness_time)
+ to_chat(H, "[A] calms you down...")
+ H.next_loneliness_time = world.time+500
+
+ // No company? Suffer :(
+ if(H.loneliness_stage < warning_cap)
+ H.loneliness_stage = min(warning_cap,H.loneliness_stage+escalation_speed)
+ handle_loneliness(H)
+ if(H.loneliness_stage >= warning_cap && H.hallucination < hallucination_cap)
+ H.hallucination = min(hallucination_cap,H.hallucination+2.5*escalation_speed)
+
+/datum/trait/lonely/proc/handle_loneliness(var/mob/living/carbon/human/H)
+ var/ms = ""
+ if(H.loneliness_stage == escalation_speed)
+ ms = "Well.. No one is around you anymore..."
+ if(H.loneliness_stage >= 50)
+ ms = "You begin to feel alone..."
+ if(H.loneliness_stage >= 250)
+ ms = "[pick("You don't think you can last much longer without some visible company!", "You should go find someone!")]"
+ if(H.stuttering < hallucination_cap)
+ H.stuttering += 5
+ if(H.loneliness_stage >= warning_cap)
+ ms = "[pick("Where are the others?", "Please, there has to be someone nearby!", "I don't want to be alone!")] "
+ if(world.time < H.next_loneliness_time)
+ return
+ if(ms != "")
+ to_chat(H, ms)
+ H.next_loneliness_time = world.time+500
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral_ch.dm
index e3f8a171e9..ab70d1e0c8 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral_ch.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral_ch.dm
@@ -14,4 +14,10 @@
/datum/trait/succubus_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
- H.verbs |= /mob/living/proc/succubus_bite
\ No newline at end of file
+ H.verbs |= /mob/living/proc/succubus_bite
+
+/datum/trait/nutritiongrow
+ name = "Growing"
+ desc = "After you consume enough nutrition, you start to slowly grow while metabolizing nutrition faster."
+ cost = 0
+ var_changes = list("grows" = TRUE)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
index 49e0e2cf3e..9c22f2f60c 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
@@ -100,6 +100,12 @@
cost = 2
var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing))
+/datum/trait/fangs
+ name = "Numbing Fangs"
+ desc = "Provides fangs that makes the person bit unable to feel their body or pain."
+ cost = 1
+ var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp/numbing))
+
/datum/trait/minor_brute_resist
name = "Minor Brute Resist"
desc = "Adds 10% resistance to brute damage sources."
@@ -159,13 +165,13 @@
desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed. You may wish to note this down in your medical records."
cost = 2
var_changes = list("alcohol_mod" = 0.25)
-
+
/datum/trait/pain_tolerance_basic
name = "Pain Tolerant"
desc = "You're a little more resistant to pain than most, and experience 10% less pain from from all sources."
cost = 1
var_changes = list("pain_mod" = 0.9)
-
+
/datum/trait/pain_tolerance_advanced
name = "High Pain Tolerance"
desc = "You are noticeably more resistant to pain than most, and experience 20% less pain from all sources."
@@ -247,13 +253,15 @@
cost = 2
var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295)
excludes = list(/datum/trait/hotadapt)
-
+ not_for_synths = 1 // CHOMP edit
+
/datum/trait/hotadapt
name = "Heat-Adapted"
desc = "You are able to withstand much hotter temperatures than other species, and can even be comfortable in extremely hot environments. You are also more vulnerable to cold environments as a consequence of these adaptations."
cost = 2
var_changes = list("heat_level_1" = 420, "heat_level_2" = 460, "heat_level_3" = 1100, "breath_heat_level_1" = 440, "breath_heat_level_2" = 510, "breath_heat_level_3" = 1500, "heat_discomfort_level" = 390, "cold_level_1" = 280, "cold_level_2" = 220, "cold_level_3" = 140, "breath_cold_level_1" = 260, "breath_cold_level_2" = 240, "breath_cold_level_3" = 120, "cold_discomfort_level" = 280)
excludes = list(/datum/trait/coldadapt)
+ not_for_synths = 1 // CHOMP edit
// YW Addition end
/datum/trait/snowwalker
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm
new file mode 100644
index 0000000000..ce55c4b111
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm
@@ -0,0 +1,37 @@
+/datum/trait/linguist
+ name = "Master Linguist"
+ desc = "You are a master of languages! For whatever reason you might have, you are able to learn many more languages than others."
+ cost = 2
+ var_changes = list("num_alternate_languages" = 12)
+
+/datum/trait/densebones
+ name = "Dense bones"
+ desc = "Your bones (or robotic limbs) are more dense or stronger then what is considered normal. It is much harder to fracture your bones, yet pain from fractures is much more intense."
+ cost = 2
+ excludes = list(/datum/trait/hollow)
+
+/datum/trait/densebones/apply(var/datum/species/S,var/mob/living/carbon/human/H)
+ ..(S,H)
+ for(var/obj/item/organ/external/organ in H.organs)
+ if(istype(organ))
+ organ.min_broken_damage *= 1.5
+ organ.brokenpain *= 2
+
+/datum/trait/lowpressureres
+ name = "Low Pressure Resistance"
+ desc = "Your body is more resistant to low pressures. Pretty simple."
+ cost = 3
+ var_changes = list("hazard_low_pressure" = HAZARD_LOW_PRESSURE*0.66, "warning_low_pressure" = WARNING_LOW_PRESSURE*0.66, "minimum_breath_pressure" = 16*0.66)
+
+/datum/trait/highpressureres
+ name = "High Pressure Resistance"
+ desc = "Your body is more resistant to high pressures. Pretty simple."
+ cost = 3
+ var_changes = list("hazard_high_pressure" = HAZARD_HIGH_PRESSURE*1.5, "warning_high_pressure" = WARNING_HIGH_PRESSURE*1.5)
+
+/datum/trait/photosynth
+ name = "Photosynthesis"
+ desc = "Your body is able to produce nutrition from being in light."
+ cost = 3
+ var_changes = list("photosynthesizing" = TRUE)
+ not_for_synths = 1 //Synths don't use nutrition.
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait_ch.dm
new file mode 100644
index 0000000000..662d3ebdc0
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait_ch.dm
@@ -0,0 +1,19 @@
+/datum/trait
+ var/special_env = FALSE
+
+/datum/trait/proc/handle_environment_special(var/mob/living/carbon/human/H)
+ return
+
+/datum/trait/apply(var/datum/species/S,var/mob/living/carbon/human/H)
+ ASSERT(S)
+ if(var_changes)
+ for(var/V in var_changes)
+ S.vars[V] = var_changes[V]
+ if(special_env)
+ S.env_traits += src
+ return
+/datum/trait/remove(var/datum/species/S)
+ ASSERT(S)
+ if(special_env)
+ S.env_traits -= src
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
index f7da2b0550..1268fb0c6e 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
@@ -10,6 +10,9 @@
hud_type = /datum/hud_data/alien
rarity_value = 3
+ male_scream_sound = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg') //CHOMPedit SCREE
+ female_scream_sound = list('sound/effects/mob_effects/x_scream1.ogg','sound/effects/mob_effects/x_scream2.ogg','sound/effects/mob_effects/x_scream3.ogg') //CHOMPedit SCREE
+
darksight = 10 //CHOMPedit. Added darksight
vision_flags = SEE_SELF|SEE_MOBS|SEE_TURFS //CHOMPedit trying to make xenos see properly
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 24f06a43b4..06429d02f3 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -151,7 +151,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
M.Turn(90)
M.Scale(desired_scale_x, desired_scale_y)
- M.Translate(1,-6)
+ if(species.icon_height == 64)//VOREStation Edit
+ M.Translate(13,-22)
+ else
+ M.Translate(1,-6)
layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters
else
M.Scale(desired_scale_x, desired_scale_y)
diff --git a/code/modules/mob/living/carbon/human/update_icons_vr.dm b/code/modules/mob/living/carbon/human/update_icons_vr.dm
index 45a5690ae6..d05f8afa22 100644
--- a/code/modules/mob/living/carbon/human/update_icons_vr.dm
+++ b/code/modules/mob/living/carbon/human/update_icons_vr.dm
@@ -3,13 +3,13 @@
return
//If you are FBP with wing style and didn't set a custom one
- if(synthetic && synthetic.includes_wing && !wing_style)
+ if((synthetic && synthetic.includes_wing && !wing_style) && !wings_hidden)
var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing?
wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(wing_s)
//If you have custom wings selected
- if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
+ if((wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) && !wings_hidden)
var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = flapping && wing_style.ani_state ? wing_style.ani_state : wing_style.icon_state)
if(wing_style.do_colouration)
wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode)
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
index 95c14bc195..e53dd71b12 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
@@ -252,7 +252,7 @@
to_chat(user, "You finish off \the [target.name], and gain some charge! ")
var/mob/living/silicon/robot/R = user
var/obj/item/weapon/cell/C = target
- R.cell.charge += C.maxcharge / 3
+ R.cell.charge += C.charge / 3
water.use_charge(5)
qdel(target)
return
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index d6f5acfb3d..bd608ca006 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -219,7 +219,8 @@
/obj/item/mecha_parts/part,
/obj/item/mecha_parts/micro/part, //VOREStation Edit: Allow construction of micromechs,
/obj/item/mecha_parts/mecha_equipment,
- /obj/item/mecha_parts/mecha_tracking
+ /obj/item/mecha_parts/mecha_tracking,
+ /obj/item/mecha_parts/component
)
/obj/item/weapon/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item
diff --git a/code/modules/mob/living/simple_animal/aliens/synx.dm b/code/modules/mob/living/simple_animal/aliens/synx.dm
index 9f7ba6228c..8a96987254 100644
--- a/code/modules/mob/living/simple_animal/aliens/synx.dm
+++ b/code/modules/mob/living/simple_animal/aliens/synx.dm
@@ -2,7 +2,7 @@
#define SYNX_UPPER_DAMAGE 6
-/mob/living/simple_mob/retaliate/synx //Player controlled variant
+/mob/living/simple_mob/animal/synx //Player controlled variant
//on inteligence https://synx.fandom.com/wiki/Behavior/Intelligence //keeping this here for player controlled synxes.
name = "Synx"
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration."
@@ -13,6 +13,7 @@
icon_state = "synx_living"
icon_living = "synx_living"
icon_dead = "synx_dead"
+ mob_bump_flag = SIMPLE_ANIMAL //This not existing was breaking vore bump for some reason.
var/list/speak = list()
var/speak_chance = 1 //MAy have forgotten to readd that.
@@ -100,12 +101,12 @@
max_n2 = 0 //Maybe add a max
// TODO: Set a max temperature of about 20-30 above room temperatures. Synx don't like the heat.
-/mob/living/simple_mob/retaliate/synx/ai //AI controlled variant
+/mob/living/simple_mob/animal/synx/ai //AI controlled variant
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
-/mob/living/simple_mob/retaliate/synx/init_vore()
+/mob/living/simple_mob/animal/synx/init_vore()
..()
var/obj/belly/B = vore_selected
//B.human_prey_swallow_time = 6 SECONDS //doesnt work
@@ -134,7 +135,7 @@
)
B.mode_flags = DM_FLAG_NUMBING //Prey are more docile when it doesn't hurt.
-/mob/living/simple_mob/retaliate/synx/ai/pet/asteri/init_vore()
+/mob/living/simple_mob/animal/synx/ai/pet/asteri/init_vore()
..()
var/obj/belly/B = vore_selected
B.desc = "The synx eagerly swallows you, taking you from its gullet into its long, serpentine stomach. The internals around you greedily press into your from all sides, keeping you coated in a slick coat of numbing fluids..."
@@ -158,16 +159,16 @@
"The synx's body gleefully takes what's left of your life, Asteri's usually-repressed sadism overwhelmed with a sinister satisfaction in snuffing you out as your liquefied remains gush into a bit more heft on the parasite's emaciated frame.",
)
-/mob/living/simple_mob/retaliate/synx/New() //this is really cool. Should be able to ventcrawl canonicaly, contort, and make random speech.
+/mob/living/simple_mob/animal/synx/New() //this is really cool. Should be able to ventcrawl canonicaly, contort, and make random speech.
//some things should be here that arent tho.
..()
verbs |= /mob/living/proc/ventcrawl
- verbs |= /mob/living/simple_mob/retaliate/synx/proc/distend_stomach //to do later: sprites of stomach outside the body.
+ verbs |= /mob/living/simple_mob/animal/synx/proc/distend_stomach //to do later: sprites of stomach outside the body.
verbs |= /mob/living/simple_mob/proc/contort
- verbs |= /mob/living/simple_mob/retaliate/synx/proc/sonar_ping
+ verbs |= /mob/living/simple_mob/animal/synx/proc/sonar_ping
verbs |= /mob/living/proc/shred_limb
- verbs |= /mob/living/simple_mob/retaliate/synx/proc/disguise
- verbs |= /mob/living/simple_mob/retaliate/synx/proc/randomspeech
+ verbs |= /mob/living/simple_mob/animal/synx/proc/disguise
+ verbs |= /mob/living/simple_mob/animal/synx/proc/randomspeech
realname = name
voices += "Garbled voice"
voices += "Unidentifiable Voice"
@@ -177,6 +178,7 @@
//////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// SPECIAL ITEMS/REAGENTS !!!! ////////////////////////////
////////////////////////////////////////////////////////////////////////////////////// //keeping most of these the same except the stuff that apply to the standard synx. -lo
+/*
/datum/seed/hardlightseed/
name = "Type NULL Hardlight Generator"
seed_name = "Biomechanical Hardlight generator seed"
@@ -204,7 +206,8 @@
name = "hardlightseedsx"
seed_name = "hardlightseedsx"
display_name = "Biomechanical Hardlight Generator SX"//PLant that is part mechanical part biological
- has_mob_product = /mob/living/simple_mob/retaliate/synx/ai/pet/holo
+ has_mob_product = /mob/living/simple_mob/animal/synx/ai/pet/holo
+*/ //This is defined in seed_datums_ch
/obj/item/seeds/hardlightseed/typesx
seed_type = "hardlightseedsx"
@@ -310,7 +313,7 @@
//////////////////////////////////////////////////////////////////////////////////////
// nevermind. I added any roleplay flavor weird fur mechanics to happen when you touch or attack the synx.
-/mob/living/simple_mob/retaliate/synx/apply_melee_effects(var/atom/A) //Re-adding this for AI synx
+/mob/living/simple_mob/animal/synx/apply_melee_effects(var/atom/A) //Re-adding this for AI synx
if(stomach_distended) //Hacky burn damage code
if(isliving(A)) //Only affect living mobs, should include silicons. This could be expanded to deal special effects to acid-vulnerable objects.
var/mob/living/L = A
@@ -345,7 +348,7 @@
-/mob/living/simple_mob/retaliate/synx/hear_say(message,verb,language,fakename,isItalics,var/mob/living/speaker)
+/mob/living/simple_mob/animal/synx/hear_say(message,verb,language,fakename,isItalics,var/mob/living/speaker)
. = ..()
if(!message) return
if (speaker == src) return
@@ -361,7 +364,7 @@
if(message=="Honk!")
bikehorn()
-/mob/living/simple_mob/retaliate/synx/ai/pet/clown/Life()
+/mob/living/simple_mob/animal/synx/ai/pet/clown/Life()
..()
if(vore_fullness)
size_multiplier = 1+(0.5*vore_fullness)
@@ -369,13 +372,13 @@
if(!vore_fullness && size_multiplier != 1)
size_multiplier = 1
update_icons()
-/mob/living/simple_mob/retaliate/synx/Life()
+/mob/living/simple_mob/animal/synx/Life()
..()
-//mob/living/simple_mob/retaliate/synx/ai/handle_idle_speaking() //Only ai-controlled synx will randomly speak
+//mob/living/simple_mob/animal/synx/ai/handle_idle_speaking() //Only ai-controlled synx will randomly speak
if(voices && prob(speak_chance/2))
randomspeech()
-/mob/living/simple_mob/retaliate/synx/perform_the_nom() //Synx can only eat people if their organs are on the inside.
+/mob/living/simple_mob/animal/synx/perform_the_nom() //Synx can only eat people if their organs are on the inside.
if(stomach_distended)
to_chat(src,"You can't eat people without your stomach inside of you! ")
return
@@ -406,7 +409,7 @@
to_chat(src,"You are now hiding. ")
movement_cooldown = 6
-/mob/living/simple_mob/retaliate/synx/proc/disguise()
+/mob/living/simple_mob/animal/synx/proc/disguise()
set name = "Toggle Form"
set desc = "Switch between amorphous and humanoid forms."
set category = "Abilities"
@@ -429,7 +432,7 @@
transformed = !transformed
update_icons()
-/mob/living/simple_mob/retaliate/synx/proc/randomspeech()
+/mob/living/simple_mob/animal/synx/proc/randomspeech()
set name = "speak"
set desc = "Takes a sentence you heard and says it"
set category = "Abilities"
@@ -438,7 +441,7 @@
else
usr << "YOU NEED TO HEAR THINGS FIRST, try using Ventcrawl to eevesdrop on nerds "
-/mob/living/simple_mob/retaliate/synx/proc/handle_mimic()
+/mob/living/simple_mob/animal/synx/proc/handle_mimic()
name = pick(voices)
spawn(2)
src.say(pick(speak))
@@ -447,10 +450,10 @@
//lo- procs adjusted to mobs.
-/mob/living/simple_mob/retaliate/synx
+/mob/living/simple_mob/animal/synx
var/next_sonar_ping = 0
-/mob/living/simple_mob/retaliate/synx/proc/sonar_ping()
+/mob/living/simple_mob/animal/synx/proc/sonar_ping()
set name = "Listen In"
set desc = "Allows you to listen in to movement and noises around you."
set category = "Abilities"
@@ -499,7 +502,7 @@
-/mob/living/simple_mob/retaliate/synx/proc/distend_stomach()
+/mob/living/simple_mob/animal/synx/proc/distend_stomach()
set name = "Distend Stomach"
set desc = "Allows you to throw up your stomach, giving your attacks burn damage at the cost of your stomach contents going everywhere. Yuck."
set category = "Abilities"
@@ -537,7 +540,7 @@
////////////////////////////////////////
////////////////PET VERSION/////////////
////////////////////////////////////////
-/mob/living/simple_mob/retaliate/synx/ai/pet
+/mob/living/simple_mob/animal/synx/ai/pet
faction = "Cargonia" //Should not share a faction with those pesky non station synxes.//This is so newspaper has a failchance
name = "Bob"
desc = "A very regular pet."
@@ -546,25 +549,25 @@
glow_toggle = 1
player_msg = "You aren't supposed to be in this. Wrong mob."
-/mob/living/simple_mob/retaliate/synx/ai/pet/init_vore()
+/mob/living/simple_mob/animal/synx/ai/pet/init_vore()
..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
B.digest_burn = 1
B.digest_brute = 0
-/mob/living/simple_mob/retaliate/synx/ai/pet/holo/init_vore()
+/mob/living/simple_mob/animal/synx/ai/pet/holo/init_vore()
..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
B.digest_burn = 5
B.digest_brute = 5
-/mob/living/simple_mob/retaliate/synx/ai/pet
+/mob/living/simple_mob/animal/synx/ai/pet
speak_chance = 2.0666
//HONKMOTHER Code.
-/*/mob/living/simple_mob/retaliate/synx/proc/honk()
+/*/mob/living/simple_mob/animal/synx/proc/honk()
set name = "HONK"
set desc = "TAAA RAINBOW"
set category = "Abilities"
@@ -572,18 +575,18 @@
icon_living = "synx_pet_rainbow"
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
*/
-/mob/living/simple_mob/retaliate/synx/proc/bikehorn()
+/mob/living/simple_mob/animal/synx/proc/bikehorn()
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
//HOLOSEEDSPAWNCODE
-/mob/living/simple_mob/retaliate/synx/ai/pet/holo/death()
+/mob/living/simple_mob/animal/synx/ai/pet/holo/death()
..()
visible_message("\The [src] fades away! ")
var/location = get_turf(src)
new /obj/item/seeds/hardlightseed/typesx(location)
qdel(src)
-/mob/living/simple_mob/retaliate/synx/ai/pet/holo/gib()
+/mob/living/simple_mob/animal/synx/ai/pet/holo/gib()
visible_message("\The [src] fades away! ")
var/location = get_turf(src)
new /obj/item/seeds/hardlightseed/typesx(location)
@@ -592,7 +595,7 @@
////////////////////////////////////////
////////////////SYNX VARIATIONS/////////
////////////////////////////////////////
-/mob/living/simple_mob/retaliate/synx/ai/pet/holo
+/mob/living/simple_mob/animal/synx/ai/pet/holo
poison_chance = 100
poison_type = "fakesynxchem" //unlike synxchem this one heals!
name = "Hardlight synx"
@@ -617,7 +620,7 @@
vore_escape_chance = 30 //Much higher escape chance.. it's a hologram.
swallowTime = 10 SECONDS //Much more time to run
-/mob/living/simple_mob/retaliate/synx/ai/pet/greed
+/mob/living/simple_mob/animal/synx/ai/pet/greed
name = "Greed"
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. black, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has the name Greed burnt into its back, the burnt in name seems to be luminescent making it harder for it to blend into the dark."
//icon= //icon= would just set what DMI we are using, we already have our special one set.
@@ -635,7 +638,7 @@
vore_bump_chance = 2 //lowered bump chance
vore_escape_chance = 5 //Multivore allows for people to shove eachother out so lower normal escape chance.
-/mob/living/simple_mob/retaliate/synx/ai/pet/greed/synth
+/mob/living/simple_mob/animal/synx/ai/pet/greed/synth
/*
▓███▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓███▓
â–“â–“ â–“â–“â–“â–ˆ â–“â–“ â–“â–“â–ˆ â–“â–“ â–“â–“â–ˆ â–“â–“ â–“â–“â–ˆ â–“â–“ â–“â–“â–ˆ â–“â–“ â–“â–“â–“â–ˆ
@@ -691,11 +694,11 @@
..()
name = "SYN-KinC-([rand(100,999)])"
-/mob/living/simple_mob/retaliate/synx/ai/pet/greed/synth/goodboy
+/mob/living/simple_mob/animal/synx/ai/pet/greed/synth/goodboy
//hostile = 0
faction = "neutral"
-/mob/living/simple_mob/retaliate/synx/ai/pet/diablo
+/mob/living/simple_mob/animal/synx/ai/pet/diablo
//var/diablo_LIVING = "synx_diablo_living"
//var/diablo_DEAD = "synx_diablo_dead"
name = "diablo"
@@ -707,7 +710,7 @@
//Vore Section
vore_capacity = 2
-/mob/living/simple_mob/retaliate/synx/ai/pet/asteri
+/mob/living/simple_mob/animal/synx/ai/pet/asteri
name = "Asteri"
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Bleak white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has distinctive markings over its face forming the shape of a star, and its back holds a sizeable scar leading up to a small implanted device just above its waist, the name 'Asteri' scribed across the metal."
//icon= //icon= would just set what DMI we are using, we already have our special one set.
@@ -726,7 +729,7 @@
vore_bump_chance = 2
vore_escape_chance = 5
-/mob/living/simple_mob/retaliate/synx/ai/pet/clown
+/mob/living/simple_mob/animal/synx/ai/pet/clown
//hostile = 1
poison_chance = 100
poison_type = "clownsynxchem" //unlike synxchem this one HONKS
@@ -752,32 +755,32 @@
////////////////////////////////////////
////////////////SYNX DEBUG//////////////
////////////////////////////////////////
-/mob/living/simple_mob/retaliate/synx/ai/pet/debug
+/mob/living/simple_mob/animal/synx/ai/pet/debug
name = "Syntox"
desc = "ERROR Connection to translation server could not be established!"
-/mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/rename()
+/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename()
set name = "rename"
set desc = "Renames the synx"
set category = "DEBUG"
name = input(usr, "What would you like to change name to?", "Renaming", null)
-/mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/redesc()
+/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc()
set name = "redesc"
set desc = "Redescribes the synx"
set category = "DEBUG"
desc = input(usr, "What would you like to change desc to?", "Redescribing", null)
-/mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/resprite()
+/mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite()
set name = "resprite"
set desc = "Resprite the synx"
set category = "DEBUG"
icon_state = input(usr, "What would you like to change icon_state to?", "Respriting", null)
-/mob/living/simple_mob/retaliate/synx/ai/pet/debug/New()
- verbs |= /mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/rename
- verbs |= /mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/resprite
- verbs |= /mob/living/simple_mob/retaliate/synx/ai/pet/debug/proc/redesc
+/mob/living/simple_mob/animal/synx/ai/pet/debug/New()
+ verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/rename
+ verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/resprite
+ verbs |= /mob/living/simple_mob/animal/synx/ai/pet/debug/proc/redesc
////////////////////////////////////////
////////////////SYNX SPAWNER////////////
@@ -786,10 +789,10 @@
name = "This is synxes"
/obj/random/mob/synx/item_to_spawn()
- return pick(prob(66);/mob/living/simple_mob/retaliate/synx/ai/pet/greed,
- //prob(50);/mob/living/simple_mob/retaliate/synx/pet/asteri,//He's crew so let's remove this
- prob(33);/mob/living/simple_mob/retaliate/synx/ai/pet/holo,
- prob(50);/mob/living/simple_mob/retaliate/synx/ai,) //normal eel boyo.
+ return pick(prob(66);/mob/living/simple_mob/animal/synx/ai/pet/greed,
+ //prob(50);/mob/living/simple_mob/animal/synx/pet/asteri,//He's crew so let's remove this
+ prob(33);/mob/living/simple_mob/animal/synx/ai/pet/holo,
+ prob(50);/mob/living/simple_mob/animal/synx/ai,) //normal eel boyo.
////////////////////////////////////////////////////////////////////////////
//////////////////////////NOT A SYNX///////but looks kinda like one/////////
@@ -820,7 +823,7 @@ This includes the sprites of the below Mob which are based upon SCP 939 and spri
use_astar = TRUE //Clever boy!
threaten = TRUE
-/mob/living/simple_mob/retaliate/synx/scp
+/mob/living/simple_mob/animal/synx/scp
name = "Unknown"
desc = "It's a red canine looking creature."
tt_desc = "Unknown Alien Lifeform"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm
new file mode 100644
index 0000000000..c2e984864c
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm
@@ -0,0 +1,304 @@
+/mob/living/simple_mob/vore/lamia
+ name = "purple lamia"
+ desc = "Combination snake-human. This one is purple."
+
+ icon = 'icons/mob/vore_lamia.dmi'
+ icon_state = "ffta"
+ icon_living = "ffta"
+ icon_rest = "ffta_rest"
+ icon_dead = "ffta_dead"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+
+ response_help = "pets"
+ response_disarm = "gently baps"
+ response_harm = "hits"
+
+ health = 60
+ maxHealth = 60
+
+ old_x = -16
+ old_y = 0
+ default_pixel_x = -16
+ pixel_x = -16
+ pixel_y = 0
+
+ // Vore tags
+ vore_active = 1
+ vore_capacity = 1
+ vore_bump_emote = "coils their tail around"
+ vore_icons = 0
+ // Default stomach
+ vore_stomach_name = "upper stomach"
+ vore_stomach_flavor = "You've ended up inside of the lamia's human stomach. It's pretty much identical to any human stomach, but the valve leading deeper is much bigger."
+
+ // Meaningful stats
+ vore_default_mode = DM_HOLD
+ vore_digest_chance = 0
+ vore_pounce_chance = 65
+ vore_bump_chance = 50
+ vore_standing_too = TRUE
+ vore_escape_chance = 25
+
+ // Special lamia vore tags
+ var/vore_upper_transfer_chance = 50
+ var/vore_tail_digest_chance = 25
+ var/vore_tail_absorb_chance = 0
+ var/vore_tail_transfer_chance = 50
+
+ say_list_type = /datum/say_list/lamia
+ ai_holder_type = /datum/ai_holder/simple_mob/passive
+
+/mob/living/simple_mob/vore/lamia/update_fullness()
+ var/new_fullness = 0
+ // We only want to count our upper_stomach towards capacity
+ for(var/belly in vore_organs)
+ var/obj/belly/B = belly
+ if(B.name == "upper stomach")
+ for(var/mob/living/M in B)
+ new_fullness += M.size_multiplier
+ new_fullness /= size_multiplier
+ new_fullness = round(new_fullness, 1)
+ vore_fullness = min(vore_capacity, new_fullness)
+
+/mob/living/simple_mob/vore/lamia/update_icon()
+ . = ..()
+
+ if(vore_active)
+ // Icon_state for fullness is as such if they are CONSCIOUS:
+ // [icon_living]_vore_[upper_shows]_[tail_shows]
+ // So copper_vore_1_1 is a full upper stomach *and* tail stomach
+ // And copper_vore_1_0 is full upper stomach, but empty tail stomach
+ // For unconscious: [icon_rest]_vore_[upper]_[tail]
+ // For dead, it doesn't show.
+ var/upper_shows = FALSE
+ var/tail_shows = FALSE
+
+ for(var/belly in vore_organs)
+ var/obj/belly/B = belly
+ if(!(B.name in list("upper stomach", "tail stomach")))
+ continue
+ var/belly_fullness = 0
+ for(var/mob/living/M in B)
+ belly_fullness += M.size_multiplier
+ belly_fullness /= size_multiplier
+ belly_fullness = round(belly_fullness, 1)
+
+ if(belly_fullness)
+ if(B.name == "upper stomach")
+ upper_shows = TRUE
+ else if(B.name == "tail stomach")
+ tail_shows = TRUE
+
+ if(upper_shows || tail_shows)
+ if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED)))
+ icon_state = "[icon_living]_vore_[upper_shows]_[tail_shows]"
+ else if(stat >= DEAD)
+ icon_state = icon_dead
+ else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest)
+ icon_state = "[icon_rest]_vore_[upper_shows]_[tail_shows]"
+
+/mob/living/simple_mob/vore/lamia/init_vore()
+ . = ..()
+ var/obj/belly/B = vore_selected
+
+ B.transferchance = vore_upper_transfer_chance
+ B.transferlocation = "tail stomach"
+
+ var/obj/belly/tail = new /obj/belly(src)
+ tail.immutable = TRUE
+ tail.name = "tail stomach"
+ tail.desc = "You slide out into the narrow, constricting tube of flesh that is the lamia's snake half, heated walls and strong muscles all around clinging to your form with every slither."
+ tail.digest_mode = vore_default_mode
+ tail.mode_flags = vore_default_flags
+ tail.item_digest_mode = vore_default_item_mode
+ tail.contaminates = vore_default_contaminates
+ tail.contamination_flavor = vore_default_contamination_flavor
+ tail.contamination_color = vore_default_contamination_color
+ tail.escapable = TRUE // needed for transferchance
+ tail.escapechance = 0 // No directly escaping a tail, gotta squirm back out.
+ tail.digestchance = vore_tail_digest_chance
+ tail.absorbchance = vore_tail_absorb_chance
+ tail.transferchance = vore_tail_transfer_chance
+ tail.transferlocation = "upper stomach"
+ tail.human_prey_swallow_time = swallowTime
+ tail.nonhuman_prey_swallow_time = swallowTime
+ tail.vore_verb = "stuff"
+ tail.emote_lists[DM_HOLD] = B.emote_lists[DM_HOLD].Copy()
+ tail.emote_lists[DM_DIGEST] = B.emote_lists[DM_DIGEST].Copy()
+
+// FFTA Bra
+/mob/living/simple_mob/vore/lamia/bra
+ desc = "Combination snake-human. This one is purple. They're wearing a bra."
+ icon_state = "ffta_bra"
+ icon_living = "ffta_bra"
+ icon_rest = "ffta_bra_rest"
+ icon_dead = "ffta_bra_dead"
+
+// Albino
+/mob/living/simple_mob/vore/lamia/albino
+ name = "albino lamia"
+ desc = "Combination snake-human. This one is albino."
+ icon_state = "albino"
+ icon_living = "albino"
+ icon_rest = "albino_rest"
+ icon_dead = "albino_dead"
+
+/mob/living/simple_mob/vore/lamia/albino/bra
+ desc = "Combination snake-human. This one is albino. They're wearing a bra."
+ icon_state = "albino_bra"
+ icon_living = "albino_bra"
+ icon_rest = "albino_bra_rest"
+ icon_dead = "albino_bra_dead"
+
+/mob/living/simple_mob/vore/lamia/albino/shirt
+ desc = "Combination snake-human. This one is albino. They're wearing a shirt."
+ icon_state = "albino_shirt"
+ icon_living = "albino_shirt"
+ icon_rest = "albino_shirt_rest"
+ icon_dead = "albino_shirt_dead"
+
+// Cobra
+/mob/living/simple_mob/vore/lamia/cobra
+ name = "cobra lamia"
+ desc = "Combination snake-human. This one looks like a cobra."
+ icon_state = "cobra"
+ icon_living = "cobra"
+ icon_rest = "cobra_rest"
+ icon_dead = "cobra_dead"
+
+/mob/living/simple_mob/vore/lamia/cobra/bra
+ desc = "Combination snake-human. This one looks like a cobra. They're wearing a bra."
+ icon_state = "cobra_bra"
+ icon_living = "cobra_bra"
+ icon_rest = "cobra_bra_rest"
+ icon_dead = "cobra_bra_dead"
+
+/mob/living/simple_mob/vore/lamia/cobra/shirt
+ desc = "Combination snake-human. This one looks like a cobra. They're wearing a shirt."
+ icon_state = "cobra_shirt"
+ icon_living = "cobra_shirt"
+ icon_rest = "cobra_shirt_rest"
+ icon_dead = "cobra_shirt_dead"
+
+// Copper
+/mob/living/simple_mob/vore/lamia/copper
+ name = "copper lamia"
+ desc = "Combination snake-human. This one is copper."
+ icon_state = "copper"
+ icon_living = "copper"
+ icon_rest = "copper_rest"
+ icon_dead = "copper_dead"
+
+/mob/living/simple_mob/vore/lamia/copper/bra
+ desc = "Combination snake-human. This one is copper. They're wearing a bra."
+ icon_state = "copper_bra"
+ icon_living = "copper_bra"
+ icon_rest = "copper_bra_rest"
+ icon_dead = "copper_bra_dead"
+
+/mob/living/simple_mob/vore/lamia/copper/shirt
+ desc = "Combination snake-human. This one is copper. They're wearing a shirt."
+ icon_state = "copper_shirt"
+ icon_living = "copper_shirt"
+ icon_rest = "copper_shirt_rest"
+ icon_dead = "copper_shirt_dead"
+
+// Green
+/mob/living/simple_mob/vore/lamia/green
+ name = "green lamia"
+ desc = "Combination snake-human. This one is green."
+ icon_state = "green"
+ icon_living = "green"
+ icon_rest = "green_rest"
+ icon_dead = "green_dead"
+
+/mob/living/simple_mob/vore/lamia/green/bra
+ desc = "Combination snake-human. This one is green. They're wearing a bra."
+ icon_state = "green_bra"
+ icon_living = "green_bra"
+ icon_rest = "green_bra_rest"
+ icon_dead = "green_bra_dead"
+
+/mob/living/simple_mob/vore/lamia/green/shirt
+ desc = "Combination snake-human. This one is green. They're wearing a shirt."
+ icon_state = "green_shirt"
+ icon_living = "green_shirt"
+ icon_rest = "green_shirt_rest"
+ icon_dead = "green_shirt_dead"
+
+// Zebra
+/mob/living/simple_mob/vore/lamia/zebra
+ name = "zebra lamia"
+ desc = "Combination snake-human. This one has a zebra pattern."
+ icon_state = "zebra"
+ icon_living = "zebra"
+ icon_rest = "zebra_rest"
+ icon_dead = "zebra_dead"
+
+/mob/living/simple_mob/vore/lamia/zebra/bra
+ desc = "Combination snake-human. This one has a zebra pattern. They're wearing a bra."
+ icon_state = "zebra_bra"
+ icon_living = "zebra_bra"
+ icon_rest = "zebra_bra_rest"
+ icon_dead = "zebra_bra_dead"
+
+/mob/living/simple_mob/vore/lamia/zebra/shirt
+ desc = "Combination snake-human. This one has a zebra pattern. They're wearing a shirt."
+ icon_state = "zebra_shirt"
+ icon_living = "zebra_shirt"
+ icon_rest = "zebra_shirt_rest"
+ icon_dead = "zebra_shirt_dead"
+
+GLOBAL_LIST_INIT(valid_random_lamias, list(
+ /mob/living/simple_mob/vore/lamia,
+ /mob/living/simple_mob/vore/lamia/bra,
+ /mob/living/simple_mob/vore/lamia/albino,
+ /mob/living/simple_mob/vore/lamia/albino/bra,
+ /mob/living/simple_mob/vore/lamia/albino/shirt,
+ /mob/living/simple_mob/vore/lamia/cobra,
+ /mob/living/simple_mob/vore/lamia/cobra/bra,
+ /mob/living/simple_mob/vore/lamia/cobra/shirt,
+ /mob/living/simple_mob/vore/lamia/copper,
+ /mob/living/simple_mob/vore/lamia/copper/bra,
+ /mob/living/simple_mob/vore/lamia/copper/shirt,
+ /mob/living/simple_mob/vore/lamia/green,
+ /mob/living/simple_mob/vore/lamia/green/bra,
+ /mob/living/simple_mob/vore/lamia/green/shirt,
+ /mob/living/simple_mob/vore/lamia/zebra,
+ /mob/living/simple_mob/vore/lamia/zebra/bra,
+ /mob/living/simple_mob/vore/lamia/zebra/shirt,
+))
+
+/mob/living/simple_mob/vore/lamia/random
+/mob/living/simple_mob/vore/lamia/random/New()
+ var/mob/living/simple_mob/vore/lamia/new_attrs = pick(GLOB.valid_random_lamias)
+
+ name = initial(new_attrs.name)
+ desc = initial(new_attrs.desc)
+
+ icon_state = initial(new_attrs.icon_state)
+ icon_living = initial(new_attrs.icon_living)
+ icon_rest = initial(new_attrs.icon_rest)
+ icon_dead = initial(new_attrs.icon_dead)
+
+ vore_default_mode = initial(new_attrs.vore_default_mode)
+ vore_digest_chance = initial(new_attrs.vore_digest_chance)
+ vore_pounce_chance = initial(new_attrs.vore_pounce_chance)
+ vore_bump_chance = initial(new_attrs.vore_bump_chance)
+ vore_standing_too = initial(new_attrs.vore_standing_too)
+ vore_escape_chance = initial(new_attrs.vore_escape_chance)
+
+ vore_upper_transfer_chance = initial(new_attrs.vore_upper_transfer_chance)
+ vore_tail_digest_chance = initial(new_attrs.vore_tail_digest_chance)
+ vore_tail_absorb_chance = initial(new_attrs.vore_tail_absorb_chance)
+ vore_tail_transfer_chance = initial(new_attrs.vore_tail_transfer_chance)
+
+ . = ..()
+
+/datum/say_list/lamia
+ speak = list("Sss...","Sss!","Hiss!","HSSSSS")
+ emote_hear = list("hisses","slithers")
+ emote_see = list("shakes her head","coils","stretches","slithers")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm
new file mode 100644
index 0000000000..af2a0dc214
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm
@@ -0,0 +1,325 @@
+#define NUTRITION_FRUIT 250 //The amount of nutrition needed to produce a fruit
+#define NUTRITION_PITCHER 3 * NUTRITION_FRUIT //The amount of nutrition needed to produce a new pitcher
+#define NUTRITION_MEAT 50 //The amount of nutrition provided by slabs of meat
+#define PITCHER_SATED 250 //The amount of nutrition needed before the pitcher will attempt to grow fruit.
+#define PITCHER_HUNGRY 150 //The nutrition cap under which the pitcher actively attempts to lure prey.
+
+GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
+ "The pitcher plant smells lovely, beckoning you closer.",
+ "The sweet scent wafting from the pitcher plant makes your mouth water.",
+ "You feel an urge to investigate the pitcher plant closely.",
+ "You find yourself staring at the pitcher plant without really thinking about it.",
+ "Doesn't the pitcher plant smell amazing?")) //Messages sent to nearby players if the pitcher is trying to lure prey. This is global to prevent a new list every time a new pitcher plant spawns.
+
+//Pitcher plants, a passive carnivorous plant mob for xenobio and space vine spawning.
+//Consider making immune to space vine entangling. Check entangle_immunity in the old CHOMPstation github for an example.
+/mob/living/simple_mob/vore/pitcher_plant
+ name = "pitcher plant"
+ desc = "A carnivorous pitcher plant, bigger than a man."
+ tt_desc = "Sarraceniaceae gigantus"
+
+ icon_state = "pitcher_plant"
+ icon_living = "pitcher_plant"
+ icon_dead = "pitcher_plant_dead"
+ icon = 'icons/mob/vore_ch.dmi'
+
+ anchored = 1 //Rooted plant. Only killing it will let you move it.
+ maxHealth = 200
+ health = 200
+ a_intent = I_HELP //White this is help by default I'm leaving this here as a reminder thatdisarm will prevent playersfrom swapping places with the pitcher (but interfere with vore bump).
+ faction = "plants" //Makes plantbgone deadly.
+ ai_holder_type = /datum/ai_holder/simple_mob/passive/pitcher //It's a passive carnivorous plant, it can't detect or interact with people.
+
+ min_oxy = 0 //Immune to atmos because so are space vines. This is arbitrary and can be tweaked if desired.
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ melee_damage_upper = 0 //This shouldn't attack people but if it does (admemes) no damage can be dealt.
+ melee_damage_lower = 0
+
+ armor = list(
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = -50,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 100)
+
+ var/fruit = FALSE //Has the pitcher produced a fruit?
+ var/meat = 0 //How many units of meat is the plant digesting? Separate from actual vore mechanics.
+ var/meatspeed = 5 //How many units of meat is converted to nutrition each tick?
+ var/pitcher_metabolism = 0.1 //How much nutriment does the pitcher lose every 2 seconds? 0.1 should be around 30 every 10 minutes.
+ var/scent_strength = 5 //How much can a hungry pitcher confuse nearby people?
+ var/last_lifechecks = 0 //Timing variable to limit vore/hungry proc calls
+ var/list/pitcher_plant_lure_messages = null
+
+
+
+
+/mob/living/simple_mob/vore/pitcher_plant //Putting vore variables separately because apparently that's tradition.
+ vore_bump_chance = 100
+ vore_bump_emote = "slurps up" //Not really a good way to make the grammar work with a passive vore plant.
+ vore_active = 1
+ vore_icons = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0 //Plants only eat people who stumble into them.
+ swallowTime = 3 //3 deciseconds. This is intended to be nearly instant, e.g. victim trips and falls in.
+ vore_ignores_undigestable = 0
+ vore_default_mode = DM_DIGEST
+
+/mob/living/simple_mob/vore/pitcher_plant/init_vore()
+ ..()
+ var/obj/belly/B = vore_selected
+ B.desc = "You leaned a little too close to the pitcher plant, stumbling over the lip and splashing into a puddle of liquid filling the bottom of the cramped pitcher. You squirm madly, righting yourself and scrabbling at the walls in vain as the slick surface offers no purchase. The dim light grows dark as the pitcher's cap lowers, silently sealing the exit. With a sinking feeling you realize you won't be able to push the exit open even if you could somehow climb that high, leaving you helplessly trapped in the slick, tingling fluid. ((You can't escape this mob without help but you may use OOC Escape if you wish.))"
+ B.digest_burn = 0.5
+ B.digest_brute = 0
+ B.vore_verb = "trip"
+ B.name = "pitcher"
+ B.mode_flags = DM_FLAG_THICKBELLY
+ B.wet_loop = 0 //As nice as the fancy internal sounds are this is a plant.
+ B.digestchance = 0
+ B.escapechance = 0
+ B.fancy_vore = 1
+ B.vore_sound = "Squish2"
+ B.release_sound = "Pred Escape"
+ B.contamination_color = "purple"
+ B.contamination_flavor = "Wet"
+//Why is it we have all these customizeable belly options which nobody ever alters for mobs?
+
+ B.emote_lists[DM_HOLD] = list(
+ "Slick fluid trickles over you, carrying threads of sweetness.",
+ "Everything is still, dark, and quiet. Your breaths echo quietly.",
+ "The surrounding air feels thick and humid.")
+
+ B.emote_lists[DM_DIGEST] = list(
+ "The slimy puddle stings faintly. It seems the plant has no need to quickly break down victims.",
+ "The humid air settles in your lungs, keeping each breath more labored than the last.",
+ "Fluid drips onto you, burning faintly as your body heat warms it."
+ )
+
+ B.emote_lists[DM_DRAIN] = list(
+ "Each bead of slick fluid running down your body leaves you feeling weaker.",
+ "It's cramped and dark, the air thick and heavy. Your limbs feel like lead.",
+ "Strength drains from your frame. The cramped chamber feels easier to settle into with each passing moment.")
+
+/mob/living/simple_mob/vore/pitcher_plant/Life()
+ . = ..()
+ if(!.)
+ return
+
+ var/lastmeat = meat //If Life procs every 2 seconds that means it takes 20 seconds to digest a steak
+ meat = max(0,meat - meatspeed) //Clamp it to zero
+ adjust_nutrition(lastmeat - meat) //If there's no meat, this will just be zero.
+ if(nutrition >= PITCHER_SATED + NUTRITION_FRUIT)
+ if(prob(10)) //Should be about once every 20 seconds.
+ grow_fruit()
+ var/lastnutrition = nutrition
+ adjust_nutrition(-pitcher_metabolism)
+ adjustBruteLoss(nutrition - lastnutrition)
+ adjustToxLoss((nutrition - lastnutrition) * 3)
+ if(nutrition < pitcher_metabolism)
+ adjustToxLoss(pitcher_metabolism)
+ if(world.time > last_lifechecks + 30 SECONDS)
+ last_lifechecks = world.time
+ vore_checks()
+ handle_hungry()
+
+/mob/living/simple_mob/vore/pitcher_plant/New()
+ ..()
+ pitcher_plant_lure_messages = GLOB.pitcher_plant_lure_messages
+
+/mob/living/simple_mob/vore/pitcher_plant/Initialize()
+ ..()
+ pitcher_plant_lure_messages = GLOB.pitcher_plant_lure_messages
+
+
+/mob/living/simple_mob/vore/pitcher_plant/death()
+ ..()
+ anchored = 0
+ if(fruit)
+ new /obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit(get_turf(src))
+ fruit = FALSE
+
+
+
+/mob/living/simple_mob/vore/pitcher_plant/proc/grow_fruit() //This proc handles the pitcher turning nutrition into fruit (and new pitchers).
+ if(!fruit)
+ if(nutrition >= PITCHER_SATED + NUTRITION_FRUIT)
+ fruit = TRUE
+ adjust_nutrition(-NUTRITION_FRUIT)
+ return
+ else
+ return
+ if(fruit)
+ if(nutrition >= PITCHER_SATED + NUTRITION_PITCHER)
+ var/turf/T = safepick(circleviewturfs(src, 2)) //Try this if the above doesn't work, add src.loc == T check to density check
+ if(T.density) //No spawning in walls
+ return
+ else if(src.loc ==T)
+ return
+ else
+ new /mob/living/simple_mob/vore/pitcher_plant(get_turf(T))
+ fruit = FALSE //No admeming this to spawn endless pitchers.
+ adjust_nutrition(-NUTRITION_PITCHER)
+
+/mob/living/simple_mob/vore/pitcher_plant/attack_hand(mob/living/user)
+ if(user.a_intent == I_HELP)
+ if(fruit)
+ to_chat(user, "You pick a fruit from \the [src].")
+ var/obj/F = new /obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit(get_turf(user)) //Drops at the user's feet if put_in_hands fails
+ fruit = FALSE
+ user.put_in_hands(F)
+ else
+ to_chat(user, "The [src] hasn't grown any fruit yet!")
+ else
+ ..()
+
+/mob/living/simple_mob/vore/pitcher_plant/examine(mob/user)
+ . = ..()
+ if(fruit)
+ . += "A plump fruit glistens beneath \the [src]'s cap."
+
+/mob/living/simple_mob/vore/pitcher_plant/attackby(obj/item/O, mob/user)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/meat))
+ if(meat > NUTRITION_FRUIT - NUTRITION_MEAT) //Can't exceed 250
+ to_chat(user, "The [src] is full!")
+ return
+ else
+ meat += NUTRITION_MEAT
+ qdel(O)
+ return
+ if(istype(O, /obj/item/stack/cable_coil)) //How to free people without killing the pitcher. I guess cable is ss13 rope.
+ var/mob/living/carbon/human/H
+ var/N = 0
+ for(H in vore_selected.contents) //Only works for carbons, RIP mice. Should pick the first human the code finds.
+ user.visible_message("[user] tries to fish somebody out of \the [src].", "You try to snag somebody trapped in \the [src]...")
+ if(do_after(user, rand(3 SECONDS, 7 SECONDS))) //You can just spam click to stack attempts if you feel like abusing it.
+ if(prob(15))
+ user.visible_message("[user] tugs a sticky [H] free from \the [src].", "You heft [H] free from \the [src].")
+ prey_excludes += H
+ vore_selected.release_specific_contents(H)
+ N = 1
+ //addtimer(CALLBACK(src, .proc/removeMobFromPreyExcludes, weakref(H)), 1 MINUTES) //At the time of this PR, removeMobFromPreyExcludes breaks prey_excludes by deleting the list which causes problems with the Crossed() vore override before. This can be commented back in if that gets fixed.
+ break
+ else
+ to_chat(user, "The victim slips from your grasp!")
+ N = 1
+ break //We need to terminate the loop after each outcome or this could loop through multiple bellies. Of course, there should only be one belly.
+ if(!N)
+ to_chat(user, "The pitcher is empty.")
+ if(istype(O, /obj/item/weapon/newspaper))
+ return //Can't newspaper people to freedom.
+ ..()
+
+/mob/living/simple_mob/vore/pitcher_plant/proc/vore_checks()
+ if(ckey) //This isn't intended to be a playable mob but skip all of this if it's player-controlled.
+ return
+ if(vore_selected && vore_selected.contents.len) //Looping through all (potential) vore bellies would be more thorough but probably not worth the processing power if this check happens every 30 seconds.
+ var/mob/living/L
+ var/N = 0
+ var/hasdigestable = 0
+ var/hasindigestable = 0
+ for(L in vore_selected.contents)
+ if(istype(L, /mob/living/carbon/human/monkey))
+ L.nutrition = 0 //No stuffing monkeys with protein shakes for massive nutrition.
+ if(!L.digestable)
+ vore_selected.digest_mode = DM_DRAIN
+ N = 1
+ hasindigestable = 1
+ continue
+ else
+ vore_selected.digest_mode = DM_DIGEST
+ N = 1
+ hasdigestable = 1
+ continue
+ if(hasdigestable && hasindigestable)
+ vore_selected.digest_mode = DM_DIGEST //Let's digest until we digest all the digestable prey, then move onto draining indigestable prey.
+ if(!N)
+ vore_selected.release_all_contents() //If there's no prey, spit out everything.
+
+
+
+/mob/living/simple_mob/vore/pitcher_plant/proc/handle_hungry() //Let's run this check every 30 seconds. This is how a hungry pitcher tries to lure prey.
+ if(nutrition <= PITCHER_HUNGRY) //Is sanity check another way to say redundancy?
+ var/turf/T = get_turf(src)
+ var/cardinal_turfs = T.CardinalTurfs()
+
+ for(var/mob/living/carbon/human/H in oview(2, src))
+ if(!istype(H) || !isliving(H) || H.stat == DEAD) //Living mobs only
+ continue
+ if(isSynthetic(H) || !H.species.breath_type || H.internal) //Exclude species which don't breathe or have internals.
+ continue
+ if(src.Adjacent(H)) //If they can breathe and are next to the pitcher, confuse them.
+ to_chat(H,"The sweet, overwhelming scent from \the [src] makes your senses reel! ")
+ H.Confuse(scent_strength)
+ continue
+ else
+ to_chat(H, "[pick(pitcher_plant_lure_messages)] ")
+
+ for(var/turf/simulated/TR in cardinal_turfs)
+ TR.wet_floor(1) //Same effect as water. Slip into plant, get ate.
+ else
+ return
+/mob/living/simple_mob/vore/pitcher_plant/Crossed(atom/movable/AM as mob|obj) //Yay slipnoms
+ if(AM.is_incorporeal())
+ return
+ if(istype(AM, /mob/living) && will_eat(AM) && !istype(AM, type) && prob(vore_bump_chance) && !ckey)
+ animal_nom(AM)
+ ..()
+
+/datum/ai_holder/simple_mob/passive/pitcher
+ wander = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit //As much as I want to tie hydroponics harvest code to the mob, this is simpler (albeit kinda hacky).
+ name = "squishy fruit"
+ desc = "A tender, fleshy fruit with a thin skin."
+ icon = 'icons/obj/hydroponics_products.dmi'
+ icon_state = "treefruit-product"
+ color = "#a839a2"
+ trash = /obj/item/seeds/pitcherseed
+ nutriment_amt = 1
+ nutriment_desc = list("pineapple" = 1)
+ w_class = ITEMSIZE_SMALL
+ var/datum/seed/seed = null
+ var/obj/item/seeds/pit = null
+
+/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit/Initialize()
+ . = ..()
+ reagents.add_reagent("pitcher_nectar", 5)
+ bitesize = 4
+ pit = new /obj/item/seeds/pitcherseed(src.contents)
+ seed = pit.seed
+
+/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit/afterattack(obj/O as obj, mob/user as mob, proximity)
+ if(istype(O,/obj/machinery/microwave))
+ return ..()
+ if(istype (O, /obj/machinery/seed_extractor))
+ pit.loc = O.loc //1 seed, perhaps balanced because you can get the reagents and the seed. Can be increased if desirable.
+ qdel(src)
+ if(!(proximity && O.is_open_container()))
+ return
+ to_chat(user, "You squeeze \the [src], juicing it into \the [O]. ")
+ reagents.trans_to(O, reagents.total_volume)
+ user.drop_from_inventory(src)
+ pit.loc = user.loc
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/pitcher_fruit/attack_self(mob/user)
+ to_chat(user, "You plant the fruit. ")
+ new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed)
+ GLOB.seed_planted_shift_roundstat++
+ qdel(src)
+ return
+
+#undef NUTRITION_FRUIT
+#undef NUTRITION_PITCHER
+#undef NUTRITION_MEAT
+#undef PITCHER_SATED
+#undef PITCHER_HUNGRY
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4d9a2e774a..b925bdd94e 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -222,16 +222,24 @@
if(istype(A, /obj/effect/decal/point))
return 0
- var/tile = get_turf(A)
+ var/turf/tile = get_turf(A)
if (!tile)
return 0
- var/obj/P = new /obj/effect/decal/point(tile)
- P.invisibility = invisibility
- P.plane = plane
- spawn (20)
- if(P)
- qdel(P) // qdel
+ var/turf/our_tile = get_turf(src)
+ var/obj/visual = new /obj/effect/decal/point(our_tile)
+ visual.invisibility = invisibility
+ visual.plane = plane
+
+ animate(visual,
+ pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x,
+ pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y,
+ time = 1.7,
+ easing = EASE_OUT)
+
+ spawn(20)
+ if(visual)
+ qdel(visual) // qdel
face_atom(A)
return 1
diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm
index 233c5a14f1..758f9f8938 100644
--- a/code/modules/mob/new_player/sprite_accessories_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_vr.dm
@@ -697,6 +697,11 @@
icon_state = "eyes_sergal"
body_parts = list(BP_HEAD)
+ closedeyes
+ name = "Closed Eyes"
+ icon_state = "eyes_closed"
+ body_parts = list(BP_HEAD)
+
brows
name = "Eyebrows"
icon_state = "brows"
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 7a8f2412f2..52e843a9ee 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -14,7 +14,7 @@
set_typing_indicator(FALSE)
usr.say(message)
-/mob/verb/me_verb(message as text)
+/mob/verb/me_verb(message as message)
set name = "Me"
set category = "IC"
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 05642705a1..4f48a4adf4 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -2,7 +2,7 @@
////////////////////SUBTLE COMMAND////////////////////
//////////////////////////////////////////////////////
-/mob/verb/me_verb_subtle(message as text) //This would normally go in say.dm
+/mob/verb/me_verb_subtle(message as message) //This would normally go in say.dm
set name = "Subtle"
set category = "IC"
set desc = "Emote to nearby people (and your pred/prey)"
diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
index 1f88ed6cb2..f56683451e 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm
@@ -3,6 +3,7 @@
desc = "A wall-mounted touchscreen computer."
icon = 'icons/obj/modular_telescreen.dmi'
icon_state = "telescreen"
+ layer = ABOVE_WINDOW_LAYER
icon_state_unpowered = "telescreen"
icon_state_menu = "menu"
icon_state_screensaver = "standby"
diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm
index 26539f20f2..34e36f6527 100644
--- a/code/modules/nifsoft/software/14_commlink.dm
+++ b/code/modules/nifsoft/software/14_commlink.dm
@@ -43,7 +43,6 @@
..()
nif = newloc
nifsoft = soft
- QDEL_NULL(camera) //Not supported on internal one.
/obj/item/device/communicator/commlink/Destroy()
if(nif)
diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm
index 7cdd364b16..bd0975269d 100644
--- a/code/modules/nifsoft/software/15_misc.dm
+++ b/code/modules/nifsoft/software/15_misc.dm
@@ -127,7 +127,7 @@
/datum/nifsoft/sizechange/activate()
if((. = ..()))
- var/new_size = input("Put the desired size (25-200%)", "Set Size", 200) as num
+ var/new_size = input("Put the desired size (25-200%)", "Set Size", 200) as num|null
if (!ISINRANGE(new_size,25,200))
to_chat(nif.human,"The safety features of the NIF Program prevent you from choosing this size. ")
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index ffc3d56d1d..3dd0cc0309 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -14,6 +14,7 @@
dir = SOUTH
organ_tag = "limb"
+ var/brokenpain = 50 //CHOMPEdit
// Strings
var/broken_description // fracture string if any.
var/damage_state = "00" // Modifier used for generating the on-mob damage overlay for this limb.
@@ -1053,10 +1054,12 @@ Note that amputating the affected organ does in fact remove the infection from t
return
if(owner)
- owner.visible_message(\
+ //CHOMPEdit Begin
+ owner.custom_pain(pick(\
"You hear a loud cracking sound coming from \the [owner]. ",\
"Something feels like it shattered in your [name]! ",\
- "You hear a sickening crack. ")
+ "You hear a sickening crack. "),brokenpain)
+ //CHOMPEdit End
jostle_bone()
if(organ_can_feel_pain() && !isbelly(owner.loc))
owner.emote("scream")
diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm
index e7be5f4912..65ca927ee4 100644
--- a/code/modules/organs/robolimbs.dm
+++ b/code/modules/organs/robolimbs.dm
@@ -76,13 +76,13 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Unbranded - Protez"
desc = "A simple robotic limb with retro design. Seems rather stiff."
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_alt1.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/unbranded_alt2
company = "Unbranded - Mantis Prosis"
desc = "This limb has a casing of sleek black metal and repulsive insectile design."
icon = 'icons/mob/human_races/cyberlimbs/unbranded/unbranded_alt2.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/unbranded_tajaran
company = "Unbranded - Tajaran"
@@ -186,7 +186,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Cyber Solutions"
desc = "This limb is grey and rough, with little in the way of aesthetic."
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/cybersolutions_alt2
company = "Cyber Solutions - Outdated"
@@ -211,13 +211,13 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Einstein Engines"
desc = "This limb is lightweight with a sleek design."
icon = 'icons/mob/human_races/cyberlimbs/einstein/einstein_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/grayson
company = "Grayson"
desc = "This limb has a sturdy and heavy build to it."
icon = 'icons/mob/human_races/cyberlimbs/grayson/grayson_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
monitor_styles = "blank=grayson_off;\
red=grayson_red;\
green=grayson_green;\
@@ -248,7 +248,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Hephaestus"
desc = "This limb has a militaristic black and green casing with gold stripes."
icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/hephaestus_alt1
company = "Hephaestus - Frontier"
@@ -284,7 +284,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Morpheus"
desc = "This limb is simple and functional; no effort has been made to make it look human."
icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
monitor_styles = standard_monitor_styles
/datum/robolimb/morpheus_alt1
@@ -333,7 +333,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Ward-Takahashi"
desc = "This limb features sleek black and white polymers."
icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/wardtakahashi_alt1
company = "Ward-Takahashi - Shroud"
@@ -360,7 +360,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
company = "Xion"
desc = "This limb has a minimalist black and red casing."
icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi'
- unavailable_to_build = 1
+ unavailable_to_build = 0 // CHOMP Edit
/datum/robolimb/xion_alt1
company = "Xion - Breach"
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index 1c231fc4e0..16a44332cb 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -274,6 +274,7 @@ GLOBAL_LIST_EMPTY(all_waypoints)
/obj/machinery/computer/ship/navigation/telescreen //little hacky but it's only used on one ship so it should be okay
icon_state = "tele_nav"
+ layer = ABOVE_WINDOW_LAYER
icon_keyboard = null
icon_screen = null
circuit = /obj/item/weapon/circuitboard/nav/tele
diff --git a/code/modules/persistence/noticeboard.dm b/code/modules/persistence/noticeboard.dm
index 046972ee36..c37e084ce8 100644
--- a/code/modules/persistence/noticeboard.dm
+++ b/code/modules/persistence/noticeboard.dm
@@ -3,6 +3,7 @@
desc = "A board for pinning important notices upon."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "nboard00"
+ layer = ABOVE_WINDOW_LAYER
density = 0
anchored = 1
var/list/notices
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 2ce2758090..868e3e4349 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -80,8 +80,7 @@ GLOBAL_LIST_EMPTY(apcs)
desc = "A control terminal for the area electrical systems."
icon = 'icons/obj/power.dmi'
icon_state = "apc0"
- plane = TURF_PLANE
- layer = ABOVE_TURF_LAYER
+ layer = ABOVE_WINDOW_LAYER
anchored = 1
use_power = USE_POWER_OFF
clicksound = "switch"
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_assembly_ch.dm b/code/modules/power/fusion/fuel_assembly/fuel_assembly_ch.dm
new file mode 100644
index 0000000000..d0e63edd73
--- /dev/null
+++ b/code/modules/power/fusion/fuel_assembly/fuel_assembly_ch.dm
@@ -0,0 +1,79 @@
+/obj/item/weapon/fuel_assembly/blitz
+ name = "blitz rod"
+ desc = "A highly unstable mixture of supermatter and phoron. It's probably not a good idea to try to use this in a reactor..."
+ fuel_colour = "#FCE300"
+ fuel_type = "blitz"
+
+/obj/item/weapon/fuel_assembly/blitz/New(var/newloc)
+ ..(newloc, "blitz")
+
+/obj/item/weapon/fuel_assembly/blitz/unshielded/Initialize()
+ . = ..()
+ name = "unshielded blitz rod"
+ desc = "An extremely unstable, raw rod of compressed supermatter and phoron. This seems like a terrible idea."
+ fuel_colour = "#FCE300"
+ fuel_type = "blitzu"
+ icon_state = "blank"
+ var/image/I = image(icon, "fuel_assembly")
+ I.color = "#FCE300"
+ overlays += list(I, image(icon, "fuel_assembly_bracket"),image(icon,"glow"))
+ rod_quantities[fuel_type] = initial_amount
+ SSradiation.flat_radiate(src,20,5,respect_maint = FALSE)
+ set_light(3, 3, "#FCE300")
+
+/obj/item/weapon/fuel_assembly/blitz/throw_impact(atom/hit_atom)
+ if(!..())
+ visible_message("\The [src] loses stability and shatters in a violent explosion! ")
+ explosion(src.loc, 1, 2, 4, 6)
+ qdel(src)
+
+/obj/item/weapon/fuel_assembly/blitz/unshielded/attackby(var/obj/item/I, mob/user as mob)
+ ..()
+ var/obj/item/stack/material/lead/M = I
+ if(istype(M))
+ if(M.amount>5)
+ to_chat(user,"You add a lead shell to the blitz rod. ")
+ qdel(src)
+ var/obj/item/weapon/fuel_assembly/blitz/shielded/rod = new(get_turf(user))
+ user.put_in_hands(rod)
+ return
+ else
+ to_chat(user,"You need at least five sheets of lead to add shielding! ")
+
+/obj/item/weapon/fuel_assembly/blitz/unshielded/attack_hand(mob/user)
+ . = ..()
+
+ SSradiation.radiate(src, 5)
+ var/mob/living/M = user
+ if(!istype(M))
+ return
+
+ var/burn_user = TRUE
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ var/obj/item/clothing/gloves/G = H.gloves
+ if(istype(G) && ((G.flags & THICKMATERIAL && prob(70)) || istype(G, /obj/item/clothing/gloves/gauntlets)))
+ burn_user = FALSE
+
+ if(burn_user)
+ H.visible_message("\The [src] flashes as it scorches [H]'s hands! ")
+ H.apply_damage(7, BURN, "r_hand", used_weapon="Blitz Rod")
+ H.apply_damage(7, BURN, "l_hand", used_weapon="Blitz Rod")
+ H.drop_from_inventory(src, get_turf(H))
+ return
+
+/obj/item/weapon/fuel_assembly/blitz/shielded
+ name = "blitz rod"
+
+/obj/item/weapon/fuel_assembly/blitz/shielded/Initialize()
+ . = ..()
+ name = "blitz rod"
+ desc = "A highly unstable, and highly explosive supermatter and phoron fuel rod with a lead shell, created by someone of questionable sanity. This thing has to violate at least a few intergalactic regulations."
+ fuel_colour = "#76888F"
+ fuel_type = "blitz"
+ icon_state = "blank"
+ var/image/I = image(icon, "fuel_assembly")
+ I.color = "#76888F"
+ overlays += list(I, image(icon, "fuel_assembly_bracket"),image(icon,"glow"))
+ rod_quantities[fuel_type] = initial_amount
+ set_light(2, 2, "#FCE300")
\ No newline at end of file
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
index 71dcc7684f..a5abed3c2b 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
@@ -1,4 +1,5 @@
/obj/machinery/fusion_fuel_compressor
+ var/blitzprogress = 0 //CHOMPEdit
name = "fuel compressor"
icon = 'icons/obj/machines/power/fusion.dmi'
icon_state = "fuel_compressor1"
@@ -46,22 +47,54 @@
return
if(default_part_replacement(user, thing))
return
-
+//CHOMPEdit Begin
if(istype(thing, /obj/item/stack/material))
var/obj/item/stack/material/M = thing
var/datum/material/mat = M.get_material()
- if(!mat.is_fusion_fuel)
- to_chat(user, "It would be pointless to make a fuel rod out of [mat.use_name]. ")
- return
- if(M.get_amount() < 25)
- to_chat(user, "You need at least 25 [mat.sheet_plural_name] to make a fuel rod. ")
- return
- var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), mat.name)
- visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly. ")
- M.use(25)
- user.put_in_hands(F)
+ if(!blitzprogress)
+ if(!mat.is_fusion_fuel)
+ to_chat(user, "It would be pointless to make a fuel rod out of [mat.use_name]. ")
+ return
+ if(M.get_amount() < 25)
+ if(mat.name=="supermatter")
+ visible_message("\The [user] places the [mat.use_name] into the compressor. ")
+ M.use(1)
+ blitzprogress = 1
+ verbs |= /obj/machinery/fusion_fuel_compressor/verb/eject_sheet
+ return
+ to_chat(user, "You need at least 25 [mat.sheet_plural_name] to make a fuel rod. ")
+ return
+ var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), mat.name)
+ visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly. ")
+ M.use(25)
+ user.put_in_hands(F)
+ else
+ if(mat.name=="phoron")
+ if(M.get_amount() < 25)
+ to_chat(user, "You need at least 25 phoron sheets to make a blitz rod! ")
+ return
+ var/obj/item/weapon/fuel_assembly/blitz/unshielded/F = new(get_turf(src))
+ visible_message("\The [src] compresses the supermatter and phoron into a new blitz rod! It looks unstable, maybe you should be careful with it. ")
+ M.use(25)
+ user.put_in_hands(F)
+ blitzprogress = 0
+ verbs -= /obj/machinery/fusion_fuel_compressor/verb/eject_sheet
+ else
+ to_chat(user, "A blitz rod is currently in progress! Either add 25 phoron sheets to complete it, or eject the supermatter sheet! ")
+ return
else if(do_special_fuel_compression(thing, user))
return
- return ..()
\ No newline at end of file
+ return ..()
+
+/obj/machinery/fusion_fuel_compressor/verb/eject_sheet()
+ set name = "Eject Supermatter Sheet"
+ set category = "Object"
+ set src in view(1)
+
+ var/obj/item/stack/material/supermatter/S = new (get_turf(src))
+ usr.put_in_hands(S)
+ verbs -= /obj/machinery/fusion_fuel_compressor/verb/eject_sheet
+ blitzprogress = 0
+//CHOMPEdit End
\ No newline at end of file
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
index 0ffab7db07..7d4be64157 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
@@ -53,7 +53,12 @@ var/list/fuel_injectors = list()
if(injecting)
to_chat(user, "Shut \the [src] off before playing with the fuel rod! ")
return
-
+ //CHOMPEdit Begin
+ if(istype(W,/obj/item/weapon/fuel_assembly/blitz))
+ var/secondchance = alert("Are you sure you want to put the blitz rod in the fuel injector? This definitely wasn't meant to be used like this, and could only end badly.","Confirm","Yes","No")
+ if(secondchance=="No")
+ return
+ //CHOMPEdit End
if(cur_assembly)
cur_assembly.forceMove(get_turf(src))
visible_message("\The [user] swaps \the [src]'s [cur_assembly] for \a [W]. ")
@@ -66,6 +71,13 @@ var/list/fuel_injectors = list()
cur_assembly.forceMove(get_turf(src))
user.put_in_hands(cur_assembly)
cur_assembly = W
+ //CHOMPEdit Begin
+ if(istype(W,/obj/item/weapon/fuel_assembly/blitz))
+ visible_message("The fuel injector begins to shake and whirr violently as it tries to accept the blitz rod! ")
+ spawn(30)
+ explosion(loc,2,3,4,8)
+ qdel(src)
+ //CHOMPEdit End
return
if(W.is_wrench() || W.is_screwdriver() || W.is_crowbar() || istype(W, /obj/item/weapon/storage/part_replacer))
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 996847b13b..c3927ec2bd 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -12,11 +12,19 @@
light_range = 4
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
+ var/list/shockdirs
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
/obj/machinery/containment_field/Initialize()
+ . = ..()
+ shockdirs = list(turn(dir,90),turn(dir,-90))
sense_proximity(callback = .HasProximity)
+/obj/machinery/containment_field/set_dir(new_dir)
+ . = ..()
+ if(.)
+ shockdirs = list(turn(dir,90),turn(dir,-90))
+
/obj/machinery/containment_field/Destroy()
unsense_proximity(callback = .HasProximity)
if(FG1 && !FG1.clean_up)
@@ -36,11 +44,17 @@
/obj/machinery/containment_field/ex_act(severity)
return 0
+/obj/machinery/containment_field/Crossed(mob/living/L)
+ if(!istype(L) || L.incorporeal_move)
+ return
+ shock(L)
+
/obj/machinery/containment_field/HasProximity(turf/T, atom/movable/AM, old_loc)
- if(istype(AM,/mob/living/silicon) && prob(40))
- shock(AM)
- return 1
- if(istype(AM,/mob/living/carbon) && prob(50))
+ if(!istype(AM, /mob/living) || AM:incorporeal_move)
+ return 0
+ if(!(get_dir(src,AM) in shockdirs))
+ return 0
+ if(issilicon(AM) ? prob(40) : prob(50))
shock(AM)
return 1
return 0
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 763dd32ca8..6112da7b00 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -285,11 +285,10 @@ field_generator power level display
var/field_dir = get_dir(T,get_step(G.loc, NSEW))
T = get_step(T, NSEW)
if(!locate(/obj/machinery/containment_field) in T)
- var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field()
+ var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field(T)
CF.set_master(src,G)
fields += CF
G.fields += CF
- CF.loc = T
CF.set_dir(field_dir)
var/listcheck = 0
for(var/obj/machinery/field_generator/FG in connected_gens)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 325ff928e1..ec059bc5f4 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -24,13 +24,16 @@ GLOBAL_LIST_EMPTY(solars_list)
var/ndir = SOUTH // target dir
var/turn_angle = 0
var/obj/machinery/power/solar_control/control = null
+ var/glass_type = /obj/item/stack/material/glass
/obj/machinery/power/solar/drain_power()
return -1
-/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
+/obj/machinery/power/solar/Initialize(mapload, glass_type)
. = ..()
- Make(S)
+ if(glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass
+ health *= 2
+ update_icon()
connect_to_network()
/obj/machinery/power/solar/Destroy()
@@ -50,28 +53,16 @@ GLOBAL_LIST_EMPTY(solars_list)
control.connected_panels.Remove(src)
control = null
-/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
- if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/material/glass
- S.anchored = TRUE
- S.loc = src
- if(S.glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass
- health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
- update_icon()
-
-
-
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
if(W.is_crowbar())
playsound(src, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] begins to take the glass off the solar panel. ")
if(do_after(user, 50))
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.loc = src.loc
- S.give_glass()
+ var/obj/item/solar_assembly/S = new(loc)
+ S.anchored = TRUE
+ var/obj/item/stack/glass = new glass_type(loc)
+ glass.amount = 2
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] takes the glass off the solar panel. ")
qdel(src)
@@ -169,8 +160,8 @@ GLOBAL_LIST_EMPTY(solars_list)
return
-/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S)
- ..(loc, S, 0)
+/obj/machinery/power/solar/fake/New(var/turf/loc, var/glass_type)
+ ..(loc, glass_type, 0)
/obj/machinery/power/solar/fake/process()
. = PROCESS_KILL
@@ -213,20 +204,11 @@ GLOBAL_LIST_EMPTY(solars_list)
w_class = ITEMSIZE_LARGE // Pretty big!
anchored = 0
var/tracker = 0
- var/glass_type = null
/obj/item/solar_assembly/attack_hand(var/mob/user)
if(!anchored || !isturf(loc)) // You can't pick it up
..()
-// Give back the glass type we were supplied with
-/obj/item/solar_assembly/proc/give_glass()
- if(glass_type)
- var/obj/item/stack/material/S = new glass_type(src.loc)
- S.amount = 2
- glass_type = null
-
-
/obj/item/solar_assembly/attackby(var/obj/item/weapon/W, var/mob/user)
if (!isturf(loc))
return 0
@@ -246,15 +228,12 @@ GLOBAL_LIST_EMPTY(solars_list)
if(istype(W, /obj/item/stack/material) && (W.get_material_name() == "glass" || W.get_material_name() == "rglass"))
var/obj/item/stack/material/S = W
if(S.use(2))
- glass_type = W.type
playsound(src, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] places the glass on the solar assembly. ")
if(tracker)
- new /obj/machinery/power/tracker(get_turf(src), src)
- for(var/obj/item/solar_assembly/A in loc)
- qdel(A)
+ new /obj/machinery/power/tracker(get_turf(src), W.type)
else
- new /obj/machinery/power/solar(get_turf(src), src)
+ new /obj/machinery/power/solar(get_turf(src), W.type)
qdel(src)
else
to_chat(user, "You need two sheets of glass to put them into a solar panel. ")
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 899e553b10..e3ccafa4cc 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -87,7 +87,7 @@
forceMove(T)
set_dir(move_dir)
for(var/mob/living/carbon/C in loc)
- dust_mobs(C)
+ dust_mob(C)
sleep(1) // So movement is smooth
/obj/singularity/energy_ball/proc/handle_energy()
@@ -112,7 +112,7 @@
var/Orchiectomy_target = pick(orbiting_balls)
qdel(Orchiectomy_target)
- else if(orbiting_balls.len)
+ else
dissipate() //sing code has a much better system.
/obj/singularity/energy_ball/proc/new_mini_ball()
@@ -129,43 +129,38 @@
EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36))
+/obj/singularity/energy_ball/attack_hand(mob/user)
+ dust_mob(user)
+ return 1
/obj/singularity/energy_ball/Bump(atom/A)
- dust_mobs(A)
+ dust_mob(A)
/obj/singularity/energy_ball/Bumped(atom/movable/AM)
- dust_mobs(AM)
+ dust_mob(AM)
/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target)
if (istype(target))
target.orbiting_balls += src
//TODO-LESH-DEL global.poi_list -= src
- target.dissipate_strength = target.orbiting_balls.len
+ target.dissipate_strength = target.orbiting_balls.len + 1
. = ..()
/obj/singularity/energy_ball/stop_orbit()
if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
orbitingball.orbiting_balls -= src
- orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
+ orbitingball.dissipate_strength = orbitingball.orbiting_balls.len + 1
..()
if (!loc && !QDELETED(src))
qdel(src)
-/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
- if(isliving(A))
- var/mob/living/L = A
- if(L.incorporeal_move)
- return
- if(!iscarbon(A))
+/obj/singularity/energy_ball/proc/dust_mob(mob/living/L)
+ if(!istype(L) || L.incorporeal_move)
return
- for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2))
- if(GR.anchored)
- return
- var/mob/living/carbon/C = A
- // C.dust() - Changing to do fatal elecrocution instead
- C.electrocute_act(500, src, def_zone = BP_TORSO)
+ // L.dust() - Changing to do fatal elecrocution instead
+ L.electrocute_act(500, src, def_zone = BP_TORSO)
/proc/tesla_zap(atom/source, zap_range = 3, power, explosive = FALSE, stun_mobs = TRUE)
if(!source) // Some mobs and maybe some objects delete themselves when they die.
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 0e2cc7cbf8..c03d7db3b6 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -11,14 +11,15 @@
anchored = 1
density = 1
use_power = USE_POWER_OFF
+ var/glass_type = /obj/item/stack/material/glass
var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
var/obj/machinery/power/solar_control/control = null
-/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S)
- ..(loc)
- Make(S)
+/obj/machinery/power/tracker/Initialize(mapload, glass_type)
+ . = ..()
+ update_icon()
connect_to_network()
/obj/machinery/power/tracker/Destroy()
@@ -38,15 +39,6 @@
control.connected_tracker = null
control = null
-/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S)
- if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/material/glass
- S.tracker = 1
- S.anchored = 1
- S.loc = src
- update_icon()
-
//updates the tracker icon and the facing angle for the control computer
/obj/machinery/power/tracker/proc/set_angle(var/angle)
sun_angle = angle
@@ -63,10 +55,11 @@
playsound(src, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] begins to take the glass off the solar tracker. ")
if(do_after(user, 50))
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.loc = src.loc
- S.give_glass()
+ var/obj/item/solar_assembly/S = new(loc)
+ S.tracker = TRUE
+ S.anchored = TRUE
+ var/obj/item/stack/glass = new glass_type(loc)
+ glass.amount = 2
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] takes the glass off the tracker. ")
qdel(src)
diff --git a/code/modules/projectiles/guns/launcher/confetti_ch.dm b/code/modules/projectiles/guns/launcher/confetti_ch.dm
index c068ffba8c..984cf0ccb1 100644
--- a/code/modules/projectiles/guns/launcher/confetti_ch.dm
+++ b/code/modules/projectiles/guns/launcher/confetti_ch.dm
@@ -15,7 +15,7 @@
/obj/item/weapon/gun/launcher/confetti_cannon/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 2)
- . += "It's loaded with [confetti_charge] balls of confetti. "
+ . += "It's loaded with [confetti_charge] ball\s of confetti. "
/obj/item/weapon/gun/launcher/confetti_cannon/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/shreddedp))
diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm
index 0594e2abb3..d70439a440 100644
--- a/code/modules/projectiles/guns/magnetic/bore.dm
+++ b/code/modules/projectiles/guns/magnetic/bore.dm
@@ -1,27 +1,24 @@
/obj/item/weapon/gun/magnetic/matfed
- name = "portable phoron bore"
- desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user."
- description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones."
- description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so."
- description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets."
-
- icon_state = "bore"
- item_state = "bore"
- wielded_item_state = "bore-wielded"
- one_handed_penalty = 5
-
- projectile_type = /obj/item/projectile/bullet/magnetic/bore
-
- gun_unreliable = 0
-
power_cost = 750
- load_type = /obj/item/stack/material
+ load_type = list(/obj/item/stack/material, /obj/item/weapon/ore)
var/mat_storage = 0 // How much material is stored inside? Input in multiples of 2000 as per auto/protolathe.
var/max_mat_storage = 8000 // How much material can be stored inside?
var/mat_cost = 500 // How much material is used per-shot?
- var/ammo_material = MAT_PHORON
+ var/ammo_material
+ var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type.
var/loading = FALSE
+/obj/item/weapon/gun/magnetic/matfed/Initialize()
+ . = ..()
+ if(ispath(manipulator))
+ manipulator = new manipulator(src)
+ if(manipulator)
+ mat_cost = initial(mat_cost) / (2*manipulator.rating)
+
+/obj/item/weapon/gun/magnetic/matfed/Destroy()
+ QDEL_NULL(manipulator)
+ . = ..()
+
/obj/item/weapon/gun/magnetic/matfed/examine(mob/user)
. = ..()
var/ammotext = show_ammo()
@@ -46,6 +43,7 @@
overlays = overlays_to_add
..()
+
/obj/item/weapon/gun/magnetic/matfed/attack_hand(var/mob/user) // It doesn't keep a loaded item inside.
if(user.get_inactive_hand() == src)
var/obj/item/removing
@@ -55,7 +53,6 @@
cell = null
if(removing)
- removing.forceMove(get_turf(src))
user.put_in_hands(removing)
user.visible_message("\The [user] removes \the [removing] from \the [src]. ")
playsound(src, 'sound/machines/click.ogg', 10, 1)
@@ -77,91 +74,170 @@
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
if(removable_components)
- if(istype(thing, /obj/item/weapon/cell))
- if(cell)
- to_chat(user, "\The [src] already has \a [cell] installed. ")
- return
- cell = thing
- user.drop_from_inventory(cell)
- cell.forceMove(src)
- playsound(src, 'sound/machines/click.ogg', 10, 1)
- user.visible_message("\The [user] slots \the [cell] into \the [src]. ")
- update_icon()
- return
if(thing.is_crowbar())
if(!manipulator)
to_chat(user, "\The [src] has no manipulator installed. ")
return
- manipulator.forceMove(get_turf(src))
user.put_in_hands(manipulator)
user.visible_message("\The [user] levers \the [manipulator] from \the [src]. ")
- playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
+ playsound(src, thing.usesound, 50, 1)
+ mat_cost = initial(mat_cost)
manipulator = null
update_icon()
return
- if(thing.is_screwdriver())
- if(!capacitor)
- to_chat(user, "\The [src] has no capacitor installed. ")
- return
- capacitor.forceMove(get_turf(src))
- user.put_in_hands(capacitor)
- user.visible_message("\The [user] unscrews \the [capacitor] from \the [src]. ")
- playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- capacitor = null
- update_icon()
- return
-
- if(istype(thing, /obj/item/weapon/stock_parts/capacitor))
- if(capacitor)
- to_chat(user, "\The [src] already has \a [capacitor] installed. ")
- return
- capacitor = thing
- user.drop_from_inventory(capacitor)
- capacitor.forceMove(src)
- playsound(src, 'sound/machines/click.ogg', 10, 1)
- power_per_tick = (power_cost*0.15) * capacitor.rating
- user.visible_message("\The [user] slots \the [capacitor] into \the [src]. ")
- update_icon()
- return
if(istype(thing, /obj/item/weapon/stock_parts/manipulator))
if(manipulator)
to_chat(user, "\The [src] already has \a [manipulator] installed. ")
return
manipulator = thing
- user.drop_from_inventory(manipulator)
- manipulator.forceMove(src)
+ user.drop_from_inventory(manipulator, src)
playsound(src, 'sound/machines/click.ogg', 10,1)
- mat_cost = initial(mat_cost) % (2*manipulator.rating)
+ mat_cost = initial(mat_cost) / (2*manipulator.rating)
user.visible_message("\The [user] slots \the [manipulator] into \the [src]. ")
update_icon()
return
- if(istype(thing, load_type))
- loading = TRUE
+ if(is_type_in_list(thing, load_type))
var/obj/item/stack/material/M = thing
- if(!M.material || M.material.name != ammo_material)
- return
+ if(istype(M)) //stack
+ if(!M.material || M.material.name != ammo_material || loading)
+ return
- if(mat_storage + 2000 > max_mat_storage)
- to_chat(user, "\The [src] cannot hold more [ammo_material]. ")
- return
+ if(mat_storage + SHEET_MATERIAL_AMOUNT > max_mat_storage)
+ to_chat(user, "\The [src] cannot hold more [ammo_material]. ")
+ return
- var/can_hold_val = 0
- while(can_hold_val < round(max_mat_storage / 2000))
- if(mat_storage + 2000 <= max_mat_storage && do_after(user,1.5 SECONDS))
+ var/can_hold_val = 0
+ loading = TRUE
+ while(mat_storage + SHEET_MATERIAL_AMOUNT <= max_mat_storage && do_after(user,1.5 SECONDS))
can_hold_val ++
- mat_storage += 2000
+ mat_storage += SHEET_MATERIAL_AMOUNT
playsound(src, 'sound/effects/phasein.ogg', 15, 1)
- else
- loading = FALSE
- break
- M.use(can_hold_val)
+ M.use(can_hold_val)
+ loading = FALSE
+
+ else //ore
+ if(M.material != ammo_material)
+ return
+
+ if(mat_storage + (SHEET_MATERIAL_AMOUNT/2*0.8) > max_mat_storage)
+ to_chat(user, "\The [src] cannot hold more [ammo_material]. ")
+ return
+
+ qdel(M)
+ mat_storage += (SHEET_MATERIAL_AMOUNT/2*0.8) //two plasma ores needed per sheet, some inefficiency for not using refined product
+
user.visible_message("\The [user] loads \the [src] with \the [M]. ")
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
update_icon()
return
+
. = ..()
+
+#define GEN_STARTING -1
+#define GEN_OFF 0
+#define GEN_IDLE 1
+#define GEN_ACTIVE 2
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore
+ name = "portable phoron bore"
+ desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user."
+ description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones."
+ description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so."
+ description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets or ore, and has a togglable generator that can recharge the power cell using stored phoron."
+
+ icon_state = "bore"
+ item_state = "bore"
+ wielded_item_state = "bore-wielded"
+ one_handed_penalty = 5
+
+ projectile_type = /obj/item/projectile/bullet/magnetic/bore
+
+ gun_unreliable = 0
+ power_cost = 100
+ ammo_material = MAT_PHORON
+
+ action_button_name = "Toggle internal generator"
+
+ var/generator_state = GEN_OFF
+ var/datum/looping_sound/small_motor/soundloop
+ var/time_started //to keep the soundloop from being "stopped" too soon and playing indefinitely
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/Initialize()
+ . = ..()
+ soundloop = new(list(src), 0)
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/Destroy()
+ QDEL_NULL(soundloop)
+ . = ..()
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/ui_action_click()
+ toggle_generator(usr)
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/process()
+ if(generator_state && !mat_storage)
+ audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out."))
+ soundloop.stop()
+ generator_state = GEN_OFF
+
+ else if(generator_state > GEN_OFF)
+ if(generator_state == GEN_IDLE && (cell?.percent() < 80 || (!cell && capacitor && capacitor.charge/capacitor.max_charge < 0.8)))
+ generator_state = GEN_ACTIVE
+ else if(generator_state == GEN_ACTIVE && (!cell || cell.fully_charged()) && (!capacitor || capacitor.charge == capacitor.max_charge))
+ generator_state = GEN_IDLE
+ soundloop.speed = generator_state
+ generator_generate()
+
+ if(capacitor)
+ if(cell)
+ if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick))
+ capacitor.charge(power_per_tick)
+ else if(!generator_state)
+ capacitor.use(capacitor.charge * 0.05)
+
+ update_state()
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/generator_generate()
+ var/fuel_used = generator_state == GEN_IDLE ? 5 : 25
+ var/power_made = fuel_used * 800 * CELLRATE //20kW when active, same power as a pacman on setting one, but less efficient because compact and portable
+ if(cell)
+ cell.give(power_made)
+ else if(capacitor)
+ capacitor.charge(power_made)
+ mat_storage = max(mat_storage - fuel_used, 0)
+ var/turf/T = get_turf(src)
+ if(T)
+ T.assume_gas("carbon_dioxide", fuel_used * 0.01, T0C+200)
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/toggle_generator(mob/living/user)
+ if(!generator_state && !mat_storage)
+ to_chat(user, SPAN_NOTICE("\The [src] has no fuel!"))
+ return
+
+ else if(!generator_state)
+ generator_state = GEN_STARTING
+ var/pull = (!cell || cell.charge < 100) ? rand(1,4) : 0
+ while(pull)
+ playsound(src, 'sound/items/small_motor/motor_pull_attempt.ogg', 100)
+ if(!do_after(user, 2 SECONDS, src))
+ generator_state = GEN_OFF
+ return
+ pull--
+ soundloop.start()
+ time_started = world.time
+ cell?.use(100)
+ audible_message(SPAN_NOTICE("\The [src] starts chugging."),SPAN_NOTICE("A motor noise starts up."))
+ generator_state = GEN_IDLE
+
+ else if(generator_state > GEN_OFF && time_started + 3 SECONDS < world.time)
+ soundloop.stop()
+ audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out."))
+ generator_state = GEN_OFF
+
+/obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded
+ cell = /obj/item/weapon/cell/apc
+ capacitor = /obj/item/weapon/stock_parts/capacitor
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index bbdcc29936..89e6345704 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -17,7 +17,6 @@
var/obj/item/weapon/cell/cell // Currently installed powercell.
var/obj/item/weapon/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. Set to a path to spawn with one of that type.
- var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type.
var/removable_components = TRUE // Whether or not the gun can be dismantled.
var/gun_unreliable = 15 // Percentage chance of detonating in your hands.
@@ -38,16 +37,14 @@
if(ispath(capacitor))
capacitor = new capacitor(src)
capacitor.charge = capacitor.max_charge
- if(ispath(manipulator))
- manipulator = new manipulator(src)
if(ispath(loaded))
loaded = new loaded(src)
-
+
START_PROCESSING(SSobj, src)
-
+
if(capacitor)
power_per_tick = (power_cost*0.15) * capacitor.rating
-
+
update_icon()
/obj/item/weapon/gun/magnetic/Destroy()
@@ -55,7 +52,6 @@
QDEL_NULL(cell)
QDEL_NULL(loaded)
QDEL_NULL(capacitor)
- QDEL_NULL(manipulator)
. = ..()
/obj/item/weapon/gun/magnetic/get_cell()
@@ -68,7 +64,7 @@
capacitor.charge(power_per_tick)
else
capacitor.use(capacitor.charge * 0.05)
-
+
update_state() // May update icon, only if things changed.
/obj/item/weapon/gun/magnetic/proc/update_state()
@@ -80,7 +76,7 @@
newstate |= ICON_CELL
if(capacitor)
newstate |= ICON_CAP
-
+
// Functional state
if(!cell || !capacitor)
newstate |= ICON_BAD
@@ -88,7 +84,7 @@
newstate |= ICON_CHARGE
else
newstate |= ICON_READY
-
+
// Ammo indicator
if(loaded)
newstate |= ICON_LOADED
@@ -99,7 +95,7 @@
needs_update = TRUE
state = newstate
-
+
if(needs_update)
update_icon()
@@ -153,8 +149,7 @@
to_chat(user, "\The [src] already has \a [cell] installed. ")
return
cell = thing
- user.drop_from_inventory(cell)
- cell.forceMove(src)
+ user.drop_from_inventory(cell, src)
playsound(src, 'sound/machines/click.ogg', 10, 1)
user.visible_message("\The [user] slots \the [cell] into \the [src]. ")
update_icon()
@@ -164,10 +159,9 @@
if(!capacitor)
to_chat(user, "\The [src] has no capacitor installed. ")
return
- capacitor.forceMove(get_turf(src))
user.put_in_hands(capacitor)
user.visible_message("\The [user] unscrews \the [capacitor] from \the [src]. ")
- playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
+ playsound(src, thing.usesound, 50, 1)
capacitor = null
update_icon()
return
@@ -177,8 +171,7 @@
to_chat(user, "\The [src] already has \a [capacitor] installed. ")
return
capacitor = thing
- user.drop_from_inventory(capacitor)
- capacitor.forceMove(src)
+ user.drop_from_inventory(capacitor, src)
playsound(src, 'sound/machines/click.ogg', 10, 1)
power_per_tick = (power_cost*0.15) * capacitor.rating
user.visible_message("\The [user] slots \the [capacitor] into \the [src]. ")
@@ -278,38 +271,129 @@
if(loaded) //Safety.
if(istype(loaded, /obj/item/weapon/fuel_assembly))
var/obj/item/weapon/fuel_assembly/rod = loaded
- if(rod.fuel_type == "composite" || rod.fuel_type == "deuterium") //Safety check for rods spawned in without a fueltype.
- projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
- else if(rod.fuel_type == "tritium")
- projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
- else if(rod.fuel_type == "phoron")
- projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/phoron
- else if(rod.fuel_type == "supermatter")
- projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/supermatter
- visible_message("The barrel of \the [src] glows a blinding white! ")
- spawn(5)
- visible_message("\The [src] begins to rattle, its acceleration chamber collapsing in on itself! ")
- removable_components = FALSE
- spawn(15)
- audible_message("\The [src]'s power supply begins to overload as the device crumples! ") //Why are you still holding this?
- playsound(src, 'sound/effects/grillehit.ogg', 10, 1)
- var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
- var/turf/T = get_turf(src)
- sparks.set_up(2, 1, T)
- sparks.start()
+ //CHOMPEdit Begin
+ switch(rod.fuel_type)
+ if("composite") //Safety check for rods spawned in without a fueltype.
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+ if("deuterium")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+ if("tritium")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
+ if("phoron")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/phoron
+ if("supermatter")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/supermatter
+ visible_message("The barrel of \the [src] glows a blinding white! ")
+ spawn(5)
+ visible_message("\The [src] begins to rattle, its acceleration chamber collapsing in on itself! ")
+ removable_components = FALSE
spawn(15)
- visible_message("\The [src] explodes in a blinding white light! ")
- explosion(src.loc, -1, 1, 2, 3)
- qdel(src)
- else
- projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
-
+ audible_message("\The [src]'s power supply begins to overload as the device crumples! ") //Why are you still holding this?
+ playsound(src, 'sound/effects/grillehit.ogg', 10, 1)
+ var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
+ var/turf/T = get_turf(src)
+ sparks.set_up(2, 1, T)
+ sparks.start()
+ spawn(15)
+ visible_message("\The [src] explodes in a blinding white light! ")
+ explosion(src.loc, -1, 1, 2, 3)
+ qdel(src)
+ if("blitz")
+ var/max_range = 6 // -- Polymorph
+ var/banglet = 0
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/blitz
+ visible_message("\The [src] explodes in a blinding white light with a deafening bang! ")
+ for(var/obj/structure/closet/L in hear(max_range, get_turf(src)))
+ if(locate(/mob/living/carbon/, L))
+ for(var/mob/living/carbon/M in L)
+ blitzed(get_turf(src), M, max_range, banglet)
+ for(var/mob/living/carbon/M in hear(max_range, get_turf(src)))
+ blitzed(get_turf(src), M, max_range, banglet)
+ new/obj/effect/effect/sparks(src.loc)
+ new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
+ spawn(2)
+ qdel(src)
+ if("blitzu")
+ visible_message("\The [src] explodes in a blinding white light with a deafening bang! ")
+ explosion(get_turf(src),1,2,4,6)
+ qdel(src)
+ return
+ else
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
use_ammo()
capacitor.use(power_cost)
update_icon()
+ if(projectile_type)
+ return new projectile_type(src)
+ else
+ return
- return new projectile_type(src)
+/obj/item/weapon/gun/magnetic/fuelrod/proc/blitzed(var/turf/T, var/mob/living/carbon/M, var/max_range, var/banglet) // Added a new proc called 'bang' that takes a location and a person to be banged.
+ to_chat(M, "BANG ") // Called during the loop that bangs people in lockers/containers and when banging
+ playsound(src, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions.
+
+ //Checking for protections
+ var/eye_safety = 0
+ var/ear_safety = 0
+ if(iscarbon(M))
+ eye_safety = M.eyecheck()
+ ear_safety = M.get_ear_protection()
+
+ //Flashing everyone
+ var/mob/living/carbon/human/H = M
+ var/flash_effectiveness = 1
+ var/bang_effectiveness = 1
+ if(ishuman(M))
+ flash_effectiveness = H.species.flash_mod
+ bang_effectiveness = H.species.sound_mod
+ if(eye_safety < 1 && get_dist(M, T) <= round(max_range * 0.7 * flash_effectiveness))
+ M.flash_eyes()
+ M.Confuse(2 * flash_effectiveness)
+ M.Weaken(5 * flash_effectiveness)
+
+ //Now applying sound
+ if((get_dist(M, T) <= round(max_range * 0.3 * bang_effectiveness) || src.loc == M.loc || src.loc == M))
+ if(ear_safety > 0)
+ M.Confuse(2)
+ M.Weaken(1)
+ else
+ M.Confuse(10)
+ M.Weaken(3)
+ if ((prob(14) || (M == src.loc && prob(70))))
+ M.ear_damage += rand(1, 10)
+ else
+ M.ear_damage += rand(0, 5)
+ M.ear_deaf = max(M.ear_deaf,15)
+
+ else if(get_dist(M, T) <= round(max_range * 0.5 * bang_effectiveness))
+ if(!ear_safety)
+ M.Confuse(8)
+ M.ear_damage += rand(0, 3)
+ M.ear_deaf = max(M.ear_deaf,10)
+
+ else if(!ear_safety && get_dist(M, T) <= (max_range * 0.7 * bang_effectiveness))
+ M.Confuse(4)
+ M.ear_damage += rand(0, 1)
+ M.ear_deaf = max(M.ear_deaf,5)
+
+ //This really should be in mob not every check
+ if(ishuman(M))
+ var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
+ if (E && E.damage >= E.min_bruised_damage)
+ to_chat(M, "Your eyes start to burn badly! ")
+ if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if (E.damage >= E.min_broken_damage)
+ to_chat(M, "You can't see anything! ")
+ if (M.ear_damage >= 15)
+ to_chat(M, "Your ears start to ring badly! ")
+ if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if (prob(M.ear_damage - 10 + 5))
+ to_chat(M, "You can't hear anything! ")
+ M.sdisabilities |= DEAF
+ else if(M.ear_damage >= 5)
+ to_chat(M, "Your ears start to ring! ")
+//CHOMPEdit End
/obj/item/weapon/gun/magnetic/fuelrod/New()
cell = new /obj/item/weapon/cell/high
capacitor = new /obj/item/weapon/stock_parts/capacitor
diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm
index c79afc76ca..0293ea1383 100644
--- a/code/modules/projectiles/projectile/magnetic.dm
+++ b/code/modules/projectiles/projectile/magnetic.dm
@@ -162,6 +162,9 @@
irradiate = 20
range = 6
+/obj/item/projectile/bullet/magnetic/bore/get_structure_damage()
+ return damage * 3 //made for boring holes
+
/obj/item/projectile/bullet/magnetic/bore/Bump(atom/A, forced=0)
if(istype(A, /turf/simulated/mineral))
var/turf/simulated/mineral/MI = A
@@ -171,7 +174,6 @@
return 0
else if(istype(A, /turf/simulated/wall) || istype(A, /turf/simulated/shuttle/wall)) // Cause a loud, but relatively minor explosion on the wall it hits.
explosion(A, -1, -1, 1, 3)
- qdel(src)
- return 1
+ return ..()
else
..()
diff --git a/code/modules/projectiles/projectile/magnetic_ch.dm b/code/modules/projectiles/projectile/magnetic_ch.dm
index e86fc19557..65826e620d 100644
--- a/code/modules/projectiles/projectile/magnetic_ch.dm
+++ b/code/modules/projectiles/projectile/magnetic_ch.dm
@@ -3,4 +3,30 @@
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 10
- armor_penetration = 35
\ No newline at end of file
+ armor_penetration = 35
+
+/obj/item/projectile/bullet/magnetic/fuelrod/blitz
+ name = "blitz rod"
+ icon_state = "fuel-blitz"
+ damage = 900
+ accuracy = 200
+ incendiary = 20
+ flammability = 4
+ weaken = 40
+ penetrating = 1
+ armor_penetration = 100
+ irradiate = 120
+ range = 75
+ searing = 1
+ detonate_travel = 1
+ detonate_mob = 1
+ energetic_impact = 1
+
+/obj/item/projectile/bullet/magnetic/fuelrod/blitz/on_impact(var/atom/A)
+ if(src.loc)
+ var/mob/living/M = A
+ if(istype(M) && M.maxHealth<=200)
+ M.dust()
+ visible_message("\The [src] impacts energetically with its target and shatters in a violent explosion! ")
+ explosion(src.loc, 3, 4, 5, 10)
+ ..(A)
diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm
index cb701027d8..c467183cb5 100644
--- a/code/modules/radiation/radiation.dm
+++ b/code/modules/radiation/radiation.dm
@@ -45,7 +45,11 @@
/turf/simulated/wall/calc_rad_resistance()
SSradiation.resistance_cache[src] = (length(contents) + 1)
- cached_rad_resistance = (density ? (material.weight + material.radiation_resistance) / config.radiation_material_resistance_divisor : 0)
+ var/temp_rad_resistance
+ temp_rad_resistance += material.weight + material.radiation_resistance
+ if(reinf_material)
+ temp_rad_resistance += reinf_material.weight + reinf_material.radiation_resistance
+ cached_rad_resistance = (density ? (temp_rad_resistance) / config.radiation_material_resistance_divisor : 0)
return
/turf/simulated/mineral/calc_rad_resistance()
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
index 0d6957ae1d..d1a165af09 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
@@ -78,6 +78,50 @@
glass_name = "Pink Moo"
glass_desc = "A very familiar looking drink. ...moo?"
+/datum/reagent/ethanol/originalsin
+ name = "Original Sin"
+ id = "originalsin"
+ description = "Angel Ichor, entirely transformed by one drop of apple juice"
+ taste_description = "the apple Eve gave to Adam"
+ color = "#99CC35"
+ strength = 17
+
+ glass_name = "Original Sin"
+ glass_desc = "A drink so fine, you may just risk eternal damnation!"
+
+/datum/reagent/ethanol/newyorksour
+ name = "New York Sour"
+ id = "newyorksour"
+ description = "Whiskey sour, with a layer of wine and egg white."
+ taste_description = "refreshing lemoned whiskey, smoothed with wine"
+ color = "#FFBF3C"
+ strength = 17
+
+ glass_name = "New York Sour"
+ glass_desc = "A carefully poured three layered drink"
+
+/datum/reagent/ethanol/windgarita
+ name = "WND-Garita"
+ id = "windgarita"
+ description = "A highly questionable combination of margarita and Space Mountain Wind"
+ taste_description = "like sin, and some tequilia"
+ color = "#90D93D"
+ strength = 15
+
+ glass_name = "WND-Garita"
+ glass_desc = "Who the hell comes up with these drinks?!"
+
+/datum/reagent/ethanol/mudslide
+ name = "Mudslide"
+ id = "mudslide"
+ description = "Vodka, Kahlua and Irish Cream together at last."
+ taste_description = "a mocha milkshake, with a splash of vodka."
+ color = "#8B6338"
+ strength = 13
+
+ glass_name = "Mudslide"
+ glass_desc = "A richly coloured drink, comes with a chocolate garnish!"
+
/datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index e5f5dfb728..1a647ecd08 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -720,11 +720,20 @@
M.heal_organ_damage(3 * removed, 0) //Gives the bones a chance to set properly even without other meds
if(ishuman(M))
var/mob/living/carbon/human/H = M
- for(var/obj/item/organ/external/O in H.bad_external_organs)
- if(O.status & ORGAN_BROKEN)
- O.mend_fracture() //Only works if the bone won't rebreak, as usual
- H.custom_pain("You feel a terrible agony tear through your bones!",60)
- H.AdjustWeakened(1) //Bones being regrown will knock you over
+ //CHOMPEdit Begin
+ var/totalvol = 0
+ if(H.ingested)
+ for(var/datum/reagent/R in H.ingested.reagent_list)
+ if(istype(R,/datum/reagent/osteodaxon))
+ totalvol += R.volume
+ totalvol += volume
+ if(totalvol >= 5)
+ for(var/obj/item/organ/external/O in H.bad_external_organs)
+ if(O.status & ORGAN_BROKEN)
+ O.mend_fracture() //Only works if the bone won't rebreak, as usual
+ H.custom_pain("You feel a terrible agony tear through your bones!",60)
+ H.AdjustWeakened(1) //Bones being regrown will knock you over
+ //CHOMPEdit End
/datum/reagent/myelamine
name = "Myelamine"
@@ -732,11 +741,11 @@
description = "Used to rapidly clot internal hemorrhages by increasing the effectiveness of platelets."
reagent_state = LIQUID
color = "#4246C7"
- metabolism = REM * 0.5
+ metabolism = REM * 0.75 //CHOMPEdit
overdose = REAGENTS_OVERDOSE * 0.5
overdose_mod = 1.5
scannable = 1
- var/repair_strength = 3
+ var/repair_strength = 6 //CHOMPEdit
/datum/reagent/myelamine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents_ch.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents_ch.dm
index e18afe82b6..a6b2c37768 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents_ch.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents_ch.dm
@@ -340,6 +340,20 @@
if (alert(M,"This chemical will change your gender, proceed?", "Warning", "Yes", "No") == "Yes") //check if they want this to happen for pref sake
M.change_gender_identity(gender_change)
M << "You feel like a new person " //success
+
+////////////////////////////////////
+//////////// OTHER ////////////
+//////////////////////////////////
+//This file is a fucking mess
+/datum/reagent/nutriment/pitcher_nectar //Pitcher plant reagent, doubles plant growth speed.
+ name = "Pitcher Nectar"
+ id = "pitcher_nectar"
+ description = "An odd, sticky slurry which promotes rapid plant growth."
+ taste_description = "pineapple"
+ reagent_state = LIQUID
+ nutriment_factor = 60
+ color = "#a839a2"
+
////////////////////////////////////////////////
/////////DRINKS////////////////////////////////
//////////////////////////////////////////////
@@ -891,3 +905,10 @@
description = "Orange liquid. It wobbles around a bit like jelly."
color = "#e0962f"
taste_description = "Ammonia"
+
+//New reagent definitions/overrides. If some of these get added upstream and cause a conflict later they might need deleting.
+/datum/reagent/toxin/plantbgone/touch_mob(var/mob/living/L, amount) //Plantbgone override to damage plant mobs. Part of pitcher plants, touch_mob doesn't exist for plantbgone at the time of writing.
+ if(istype(L) && L.faction)
+ if(L.faction == "plants") //This would be better with a variable but I'm not adding that because upstream conflicts. If you send this upstream please do this.
+ L.adjustToxLoss(15 * amount)
+ L.visible_message("[L] withers rapidly! ", "The chemical burns you! ")
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 15d471da7a..7f6f9dbba7 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -268,9 +268,9 @@
name = "Peridaxon"
id = "peridaxon"
result = "peridaxon"
- required_reagents = list("bicaridine" = 2, "clonexadone" = 2)
- catalysts = list("phoron" = 5)
- result_amount = 2
+ required_reagents = list("cordradaxon" = 1, "gastirodaxon" = 1, "hepanephrodaxon" = 1, "respirodaxon" = 1) //CHOMPEdit
+ //catalysts = list("phoron" = 12) CHOMPEdit
+ result_amount = 12 //CHOMPEdit
/datum/chemical_reaction/osteodaxon
name = "Osteodaxon"
diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm
index fa4763f41d..620221d7ac 100644
--- a/code/modules/reagents/Chemistry-Recipes_vr.dm
+++ b/code/modules/reagents/Chemistry-Recipes_vr.dm
@@ -77,7 +77,7 @@
/datum/chemical_reaction/foam/softdrink
required_reagents = list("cola" = 1, "mint" = 1)
-
+
/datum/chemical_reaction/firefightingfoam //TODO: Make it so we can add this to the foam tanks to refill them
name = "Firefighting Foam"
id = "firefighting foam"
@@ -85,6 +85,15 @@
required_reagents = list("water" = 1)
catalysts = list("fluorine" = 10)
result_amount = 1
+
+/datum/chemical_reaction/firefightingfoamqol //Please don't abuse this and make us remove it. Seriously.
+ name = "Firefighting Foam EZ"
+ id = "firefighting foam ez"
+ result = "firefoam"
+ required_reagents = list("water" = 1)
+ catalysts = list("firefoam" = 5)
+ inhibitors = list("fluorine" = 0.01)
+ result_amount = 1
///////////////////////////////////////////////////////////////////////////////////
/// Vore Drugs
@@ -290,6 +299,35 @@
required_reagents = list("blackrussian" = 2, "berryshake" = 1)
result_amount = 3
+/datum/chemical_reaction/drinks/originalsin
+ name = "Original Sin"
+ id = "originalsin"
+ result = "originalsin"
+ required_reagents = list("holywine" = 1)
+ catalysts = list("applejuice" = 1)
+ result_amount = 1
+
+/datum/chemical_reaction/drinks/windgarita
+ name = "WND-Garita"
+ id = "windgarita"
+ result = "windgarita"
+ required_reagents = list("margarita" = 3, "spacemountainwind" = 2, "melonliquor" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/newyorksour
+ name = "New York Sour"
+ id = "newyorksour"
+ result = "newyorksour"
+ required_reagents = list("whiskeysour" = 3, "wine" = 2, "egg" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/mudslide
+ name = "Mudslide"
+ id = "mudslide"
+ result = "mudslide"
+ required_reagents = list("blackrussian" = 1, "irishcream" = 1)
+ result_amount = 2
+
///////////////////////////////////////////////////////////////////////////////////
/// Reagent colonies.
/datum/chemical_reaction/meatcolony
diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm
index 889e17fef4..318606516f 100644
--- a/code/modules/research/prosfab_designs.dm
+++ b/code/modules/research/prosfab_designs.dm
@@ -73,14 +73,14 @@
O.dna.ResetSE()
// Skincolor weirdness.
- O.s_col[1] = 0
- O.s_col[2] = 0
- O.s_col[3] = 0
+ O.s_col[1] = 255 // CHOMP Edit
+ O.s_col[2] = 255 // CHOMP Edit
+ O.s_col[3] = 255 // CHOMP Edit
// Resetting the UI does strange things for the skin of a non-human robot, which should be controlled by a whole different thing.
- H.r_skin = 0
- H.g_skin = 0
- H.b_skin = 0
+ H.r_skin = 255 // CHOMP Edit
+ H.g_skin = 255 // CHOMP Edit
+ H.b_skin = 255 // CHOMP Edit
H.dna.ResetUIFrom(H)
H.real_name = "Synthmorph #[rand(100,999)]"
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index 707bd3ccd9..8956e9e3c8 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -3,6 +3,7 @@
desc = "This device is used to trigger station functions, which require more than one ID card to authenticate."
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
+ layer = ABOVE_WINDOW_LAYER
circuit = /obj/item/weapon/circuitboard/keycard_auth
var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made.
var/event = ""
diff --git a/code/modules/surgery/additions_ch.dm b/code/modules/surgery/additions_ch.dm
new file mode 100644
index 0000000000..f4559f5444
--- /dev/null
+++ b/code/modules/surgery/additions_ch.dm
@@ -0,0 +1,162 @@
+/datum/surgery_status/
+ var/dehusk = 0
+
+/datum/surgery_step/dehusk/
+ priority = 1
+ can_infect = 0
+ blood_level = 1
+
+/datum/surgery_step/dehusk/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if (!affected || (affected.robotic >= ORGAN_ROBOT))
+ return 0
+ if(coverage_check(user,target,affected,tool))
+ return 0
+ return target_zone == BP_TORSO
+
+/datum/surgery_step/dehusk/structinitial
+ allowed_tools = list(
+ /obj/item/weapon/surgical/bioregen = 100, \
+ /obj/item/weapon/surgical/hemostat = 30
+ )
+ min_duration = 90
+ max_duration = 120
+
+/datum/surgery_step/dehusk/structinitial/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target.op_stage.dehusk == 0
+
+/datum/surgery_step/dehusk/structinitial/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(istype(tool,/obj/item/weapon/surgical/bioregen))
+ user.visible_message("[user] begins to create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool]. ", \
+ "You begin to create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool]. ")
+ else if(istype(tool,/obj/item/weapon/surgical/FixOVein))
+ user.visible_message("[user] attempts to create a mesh structure over gaps in [target]'s flesh using strands of damaged flesh with \the [tool]. ", \
+ "You attempt to create a mesh structure over gaps in [target]'s flesh using strands of damaged flesh with \the [tool]. ")
+ ..()
+
+/datum/surgery_step/dehusk/structinitial/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(istype(tool,/obj/item/weapon/surgical/bioregen))
+ user.visible_message("[user] creates a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool]. ", \
+ "You create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool]. ")
+ else if(istype(tool,/obj/item/weapon/surgical/FixOVein))
+ user.visible_message("[user] manages to create a mesh structure over gaps in [target]'s flesh using strands of damaged flesh with \the [tool]. ", \
+ "You manage to create a mesh structure over gaps in [target]'s flesh using strands of damaged flesh with \the [tool]. ")
+ target.op_stage.dehusk = 1
+ ..()
+
+/datum/surgery_step/dehusk/structinitial/fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(istype(tool,/obj/item/weapon/surgical/bioregen))
+ user.visible_message("[user]'s hand slips, and the mesh falls, with \the [tool] scraping [target]'s body. ", \
+ "Your hand slips, and the mesh falls, with \the [tool] scraping [target]'s body. ")
+ else if(istype(tool,/obj/item/weapon/surgical/FixOVein))
+ user.visible_message("[user] fails to create a mesh structure over gaps in [target]'s flesh, the damaged flesh just falling off and doing more damage than good. ", \
+ "You fail to create a mesh structure over gaps in [target]'s flesh, the damaged flesh just falling off and doing more damage than good. ")
+ affected.createwound(CUT, 15)
+ affected.createwound(BRUISE, 10)
+ ..()
+
+/datum/surgery_step/dehusk/relocateflesh
+ allowed_tools = list(
+ /obj/item/weapon/surgical/hemostat = 100, \
+ /obj/item/stack/cable_coil = 75, \
+ /obj/item/device/assembly/mousetrap = 20
+ )
+ min_duration = 90
+ max_duration = 120
+
+/datum/surgery_step/dehusk/relocateflesh/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target.op_stage.dehusk == 1
+
+/datum/surgery_step/dehusk/relocateflesh/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] begins to relocate some of [target]'s flesh with \the [tool], using it to fill in gaps. ", \
+ "You begin to relocate some of [target]'s flesh with \the [tool], using it to fill in gaps. ")
+ ..()
+
+/datum/surgery_step/dehusk/relocateflesh/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] relocates some of [target]'s flesh with \the [tool], using it to fill in gaps. ", \
+ "You relocate some of [target]'s flesh with \the [tool], using it to fill in gaps. ")
+ target.op_stage.dehusk = 2
+ ..()
+
+/datum/surgery_step/dehusk/relocateflesh/fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] accidentally rips a massive chunk out of [target]'s flesh with \the [tool], causing massive damage. ", \
+ "You accidentally rip a massive chunk out of [target]'s flesh with \the [tool], causing massive damage. ")
+ affected.createwound(CUT, 25)
+ affected.createwound(BRUISE, 10)
+ ..()
+
+/datum/surgery_step/dehusk/structfinish
+ allowed_tools = list(
+ /obj/item/weapon/surgical/bioregen = 100, \
+ /obj/item/weapon/surgical/FixOVein = 30
+ )
+ min_duration = 90
+ max_duration = 120
+
+/datum/surgery_step/dehusk/structfinish/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target.op_stage.dehusk == 2
+
+/datum/surgery_step/dehusk/structfinish/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(istype(tool,/obj/item/weapon/surgical/bioregen))
+ user.visible_message("[user] begins to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool]. ", \
+ "You begin to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool]. ")
+ else if(istype(tool,/obj/item/weapon/surgical/FixOVein))
+ user.visible_message("[user] attempts to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool]. ", \
+ "You attempt to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool]. ")
+ ..()
+
+/datum/surgery_step/dehusk/structfinish/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] finishes recreating the missing biological structures and filling in gaps in [target]'s flesh with \the [tool]. ", \
+ "You finish recreating the missing biological structures and filling in gaps in [target]'s flesh with \the [tool]. ")
+ target.op_stage.dehusk = 0
+ target.mutations.Remove(HUSK)
+ target.status_flags &= ~DISFIGURED
+ target.update_icons_body()
+ ..()
+
+/datum/surgery_step/dehusk/structfinish/fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(istype(tool,/obj/item/weapon/surgical/bioregen))
+ user.visible_message("[user]'s hand slips, causing \the [tool] to scrape [target]'s body. ", \
+ "Your hand slips, causing \the [tool] to scrape [target]'s body. ")
+ else if(istype(tool,/obj/item/weapon/surgical/FixOVein))
+ user.visible_message("[user] fails to finish the structure over the gaps in [target]'s flesh, doing more damage than good. ", \
+ "You fail to finish the structure over the gaps in [target]'s flesh, doing more damage than good. ")
+ affected.createwound(CUT, 15)
+ affected.createwound(BRUISE, 10)
+ ..()
+
+/datum/surgery_step/internal/detoxify
+ blood_level = 1
+ allowed_tools = list(/obj/item/weapon/surgical/bioregen=100)
+ min_duration = 90
+ max_duration = 120
+
+/datum/surgery_step/internal/detoxify/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target_zone == BP_TORSO && (target.toxloss > 25 || target.oxyloss > 25)
+
+/datum/surgery_step/internal/detoxify/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] begins to pull toxins from, and restore oxygen to [target]'s musculature and organs with \the [tool]. ", \
+ "You begin to pull toxins from, and restore oxygen to [target]'s musculature and organs with \the [tool]. ")
+ ..()
+
+/datum/surgery_step/internal/detoxify/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] finishes pulling toxins from, and restoring oxygen to [target]'s musculature and organs with \the [tool]. ", \
+ "You finish pulling toxins from, and restoring oxygen to [target]'s musculature and organs with \the [tool]. ")
+ if(target.toxloss>25)
+ target.adjustToxLoss(-20)
+ if(target.oxyloss>25)
+ target.adjustOxyLoss(-20)
+ ..()
+
+/datum/surgery_step/internal/detoxify/fail_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)
+ user.visible_message("[user]'s hand slips, failing to finish the surgery, and damaging [target] with \the [tool]. ", \
+ "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool]. ")
+ affected.createwound(CUT, 15)
+ affected.createwound(BRUISE, 10)
+ ..()
\ No newline at end of file
diff --git a/code/modules/tgui/modules/communications.dm b/code/modules/tgui/modules/communications.dm
index 1af2a003cc..045592de21 100644
--- a/code/modules/tgui/modules/communications.dm
+++ b/code/modules/tgui/modules/communications.dm
@@ -104,9 +104,10 @@
"line_2" = (stat_msg2 ? stat_msg2 : "-----"),
"presets" = list(
- list("name" = "blank", "label" = "Clear", "desc" = "Blank slate"),
- list("name" = "shuttle", "label" = "Shuttle ETA", "desc" = "Display how much time is left."),
- list("name" = "message", "label" = "Message", "desc" = "A custom message.")
+ list("name" = "blank", "label" = "Clear", "desc" = "Blank slate."),
+ list("name" = "time", "label" = "Station Time", "desc" = "The current time according to the station's clock."),
+ list("name" = "shuttle", "label" = "Shuttle ETA", "desc" = "Display how much time is left."), //CHOMPEdit we have a shuttle not a tram silly virgo//VOREStation Edit - Shuttle ETA -> Tram ETA because we use trams
+ list("name" = "message", "label" = "Message", "desc" = "A custom message.")
),
)
@@ -248,7 +249,7 @@
to_chat(usr, "Security measures prevent you from changing the alert level. ")
return
- if(check_access(usr, access_captain))
+ if(is_authenticated(usr))
change_security_level(text2num(params["level"]))
else
to_chat(usr, "You are not authorized to do this. ")
diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm
index f15f01322e..fa8b0c7c7f 100644
--- a/code/modules/vchat/vchat_client.dm
+++ b/code/modules/vchat/vchat_client.dm
@@ -382,9 +382,6 @@ var/to_chat_src
/client/proc/vchat_export_log()
set name = "Export chatlog"
set category = "OOC"
-
- to_chat(usr, "This verb is temporarily disabled due to performance issues. ") //CHOMPEdit
- return //CHOMPEdit
if(chatOutput.broken)
to_chat(src, "Error: VChat isn't processing your messages! ")
@@ -400,22 +397,22 @@ var/to_chat_src
to_chat(src, "Error: Your chat log is already being prepared. Please wait until it's been downloaded before trying to export it again. ")
return
- o_file = file(o_file)
-
// Write the CSS file to the log
- o_file << ""
+ var/text_blob = ""
// Write the messages to the log
for(var/list/result in results)
- o_file << "[result["message"]] "
+ text_blob += "[result["message"]] "
CHECK_TICK
- o_file << ""
+ text_blob += ""
+
+ rustg_file_write(text_blob, o_file)
// Send the log to the client
- src << ftp(o_file, "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html")
+ src << ftp(file(o_file), "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html")
// clean up the file on our end
spawn(10 SECONDS)
diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm
index ff5e6dbcfe..d4053e8e52 100644
--- a/code/modules/virus2/isolator.dm
+++ b/code/modules/virus2/isolator.dm
@@ -73,7 +73,7 @@
var/mob/living/carbon/human/D = B.data["donor"]
pathogen_pool.Add(list(list(\
- "name" = "[D.get_species()] [B.name]", \
+ "name" = "[istype(D) ? "[D.get_species()] " : ""][B.name]", \
"dna" = B.data["blood_DNA"], \
"unique_id" = V.uniqueID, \
"reference" = "\ref[V]", \
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index c6ce1c964e..2a625eba6a 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -370,6 +370,8 @@
prey.forceMove(src)
owner.updateVRPanel()
+ if(isanimal(owner))
+ owner.update_icon()
for(var/mob/living/M in contents)
M.updateVRPanel()
@@ -538,6 +540,8 @@
//Update owner
owner.updateVRPanel()
+ if(isanimal(owner))
+ owner.update_icon()
//Digest a single item
//Receives a return value from digest_act that's how much nutrition
@@ -707,6 +711,8 @@
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color)
items_preserved -= content
owner.updateVRPanel()
+ if(isanimal(owner))
+ owner.update_icon()
for(var/mob/living/M in contents)
M.updateVRPanel()
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index c695a9c420..50078f5279 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("fancy_death_pred")))
//CHOMPEDIT: Snowflake synx hook. Hypothetically this could be expanded to any mob by, say, giving them a parasite variable and a check for it here.
- if(istype(L,/mob/living/simple_mob/retaliate/synx))
+ if(istype(L,/mob/living/simple_mob/animal/synx))
var/syntox = B.digest_brute+B.digest_burn
B.owner.adjust_nutrition(-syntox)
L.adjust_nutrition(syntox)
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index e02253d1ba..0279a0bd25 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -231,4 +231,6 @@
if(M.client)
M.updateVRPanel()
if(owner.client)
- owner.updateVRPanel()
\ No newline at end of file
+ owner.updateVRPanel()
+ if(isanimal(owner))
+ owner.update_icon()
\ No newline at end of file
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 967c894f9d..94122d62e3 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -46,7 +46,7 @@
return TRUE
M.vorePanel = new(M)
M.verbs += /mob/living/proc/insidePanel
- M.verbs += /mob/living/proc/vore_transfer_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
+// M.verbs += /mob/living/proc/vore_transfer_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
//Tries to load prefs if a client is present otherwise gives freebie stomach
spawn(2 SECONDS)
@@ -243,8 +243,8 @@
//CHOMP reagent belly
- P.receive_reagents = src.receive_reagents
- P.give_reagents = src.give_reagents
+// P.receive_reagents = src.receive_reagents
+// P.give_reagents = src.give_reagents
var/list/serialized = list()
@@ -280,8 +280,8 @@
can_be_drop_pred = P.can_be_drop_pred
//CHOMP reagents belly
- receive_reagents = P.receive_reagents
- give_reagents = P.give_reagents
+// receive_reagents = P.receive_reagents
+// give_reagents = P.give_reagents
if(bellies)
release_vore_contents(silent = TRUE)
@@ -862,8 +862,8 @@
dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"] "
dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"] "
dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"] "
- dispvoreprefs += "Receiving liquids: [receive_reagents ? "Enabled" : "Disabled"] " //CHOMPstation edit
- dispvoreprefs += "Giving liquids: [give_reagents ? "Enabled" : "Disabled"] " //CHOMPstation edit
+// dispvoreprefs += "Receiving liquids: [receive_reagents ? "Enabled" : "Disabled"] " //CHOMPstation edit
+// dispvoreprefs += "Giving liquids: [give_reagents ? "Enabled" : "Disabled"] " //CHOMPstation edit
user << browse("Vore prefs: [src] [dispvoreprefs] ", "window=[name]mvp;size=200x300;can_resize=0;can_minimize=0")
onclose(user, "[name]")
return
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index cb6ff324fd..b41c4a4f15 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -207,9 +207,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
return FALSE
//Write it out
- if(fexists(path))
- fdel(path) //Byond only supports APPENDING to files, not replacing.
- text2file(json_to_file, path)
+ rustg_file_write(json_to_file, path)
+
if(!fexists(path))
log_debug("Saving: [path] failed file write")
return FALSE
diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm
index 27fd388c5f..b121724219 100644
--- a/code/modules/xenoarcheaology/finds/find_spawning.dm
+++ b/code/modules/xenoarcheaology/finds/find_spawning.dm
@@ -551,7 +551,9 @@
var/obj/item/weapon/reagent_containers/syringe/S = new_item
S.volume = 30
- S.reagents.maximum_volume = 30
+ //If S hasn't initialized yet, S.reagents will be null.
+ //However, in that case Initialize will set the maximum volume to the volume for us, so we don't need to do anything.
+ S.reagents?.maximum_volume = 30
item_type = new_item.name
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 504472e334..2e4caf1c33 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -112,6 +112,7 @@ h1.alert, h2.alert {color: #000000;}
.terminus {font-family: "Times New Roman", Times, serif, sans-serif}
.interface {color: #330033;}
.psionic {color: #993399;} /*YWedit*/
+.spacer {color: #9c660b;}
BIG IMG.icon {width: 32px; height: 32px;}
diff --git a/code/world.dm b/code/world.dm
index 1c43ce6132..8e76fd11d7 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -5,3 +5,4 @@
area = /area/space
view = "15x15"
cache_lifespan = 7
+ fps = 20 // If this isnt hard-defined, anything relying on this variable before world load will cry a lot
diff --git a/html/changelogs/Meghan Rossi - borosilicate shard fix.yml b/html/changelogs/Meghan Rossi - borosilicate shard fix.yml
new file mode 100644
index 0000000000..491d3380aa
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - borosilicate shard fix.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - bugfix: "Fixed borosilicate glass not producing shards in most situations."
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml b/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml
new file mode 100644
index 0000000000..5932db7e4c
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - bugfix: "Cooking a mouse into a mouseburger now uses up the mouse."
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - isolator fix.yml b/html/changelogs/Meghan Rossi - isolator fix.yml
new file mode 100644
index 0000000000..4801a45890
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - isolator fix.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - bugfix: "Blood from artifacts will no longer break the pathogenic isolator."
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - poiareas.yml b/html/changelogs/Meghan Rossi - poiareas.yml
new file mode 100644
index 0000000000..2b845c8d26
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - poiareas.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - bugfix: "Fixed some mountain POIs sometimes overlapping in odd ways"
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - tesla dissipation.yml b/html/changelogs/Meghan Rossi - tesla dissipation.yml
new file mode 100644
index 0000000000..2ee721ad9a
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - tesla dissipation.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - tweak: "The tesla energy ball will now eventually disappear if not kept charged with the particle accelerator"
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - the_teslagen.yml b/html/changelogs/Meghan Rossi - the_teslagen.yml
new file mode 100644
index 0000000000..ee59d5663e
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - the_teslagen.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - rscadd: "The Tesla Generator is now available from cargo. Coils and grounding rods for it may be printed on the protolathe and autolathe, respectively."
\ No newline at end of file
diff --git a/html/changelogs/Meghan Rossi - wall machine layering.yml b/html/changelogs/Meghan Rossi - wall machine layering.yml
new file mode 100644
index 0000000000..1e3f903681
--- /dev/null
+++ b/html/changelogs/Meghan Rossi - wall machine layering.yml
@@ -0,0 +1,4 @@
+author: Meghan-Rossi
+delete-after: True
+changes:
+ - bugfix: "If you place wall-mounted machines such as status displays on a window, they will no longer be hidden underneath the window."
\ No newline at end of file
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index d2be45594c..69842406d4 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi
index 873d455872..a1579fa775 100644
Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ
diff --git a/icons/mob/uniform_1.dmi b/icons/mob/uniform_1.dmi
index 20749c8afc..839aa8f388 100644
Binary files a/icons/mob/uniform_1.dmi and b/icons/mob/uniform_1.dmi differ
diff --git a/icons/mob/vore_ch.dmi b/icons/mob/vore_ch.dmi
index cdc56a30ac..6f12d18848 100644
Binary files a/icons/mob/vore_ch.dmi and b/icons/mob/vore_ch.dmi differ
diff --git a/icons/mob/vore_lamia.dmi b/icons/mob/vore_lamia.dmi
new file mode 100644
index 0000000000..d062b473fc
Binary files /dev/null and b/icons/mob/vore_lamia.dmi differ
diff --git a/icons/obj/closets/bases/wall_double.dmi b/icons/obj/closets/bases/wall_double.dmi
new file mode 100644
index 0000000000..e6b1a39271
Binary files /dev/null and b/icons/obj/closets/bases/wall_double.dmi differ
diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi
index 2a9ff64380..4ced8d4f28 100644
Binary files a/icons/obj/closets/decals/large_crate.dmi and b/icons/obj/closets/decals/large_crate.dmi differ
diff --git a/icons/obj/closets/decals/wall.dmi b/icons/obj/closets/decals/wall.dmi
index 8d34c97d1a..8e5edd8148 100644
Binary files a/icons/obj/closets/decals/wall.dmi and b/icons/obj/closets/decals/wall.dmi differ
diff --git a/icons/obj/closets/decals/wall_double.dmi b/icons/obj/closets/decals/wall_double.dmi
new file mode 100644
index 0000000000..3649cd44ec
Binary files /dev/null and b/icons/obj/closets/decals/wall_double.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 6f8f14c6a2..8be6774832 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/uniforms_1.dmi b/icons/obj/clothing/uniforms_1.dmi
index 32a55ec9c2..9478ef888d 100644
Binary files a/icons/obj/clothing/uniforms_1.dmi and b/icons/obj/clothing/uniforms_1.dmi differ
diff --git a/icons/obj/drinks_vr.dmi b/icons/obj/drinks_vr.dmi
index 3dca3dbfed..280bf84cbd 100644
Binary files a/icons/obj/drinks_vr.dmi and b/icons/obj/drinks_vr.dmi differ
diff --git a/icons/obj/machines/power/fusion.dmi b/icons/obj/machines/power/fusion.dmi
index 4d20f04fcd..857316c087 100644
Binary files a/icons/obj/machines/power/fusion.dmi and b/icons/obj/machines/power/fusion.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index cb79babe03..c07fe3d4ba 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/surgery_ch.dmi b/icons/obj/surgery_ch.dmi
new file mode 100644
index 0000000000..c01d6c7751
Binary files /dev/null and b/icons/obj/surgery_ch.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 21b649006c..33f220896e 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index 24e8f9f541..dae925d5d9 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi
index 72a49c07c7..b83b49c93a 100644
Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 84b74d0d2f..8e0f6d9ab2 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1225,6 +1225,7 @@ window "mapwindow"
saved-params = "icon-size"
on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\""
on-hide = ".winset\"mainwindow.mainvsplit.left=\""
+ style=".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie {color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }"
window "outputwindow"
elem "outputwindow"
diff --git a/librust_g.so b/librust_g.so
new file mode 100644
index 0000000000..3247fb19af
Binary files /dev/null and b/librust_g.so differ
diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm
index e0de199a8e..37c60f7fb9 100644
--- a/maps/southern_cross/southern_cross-2.dmm
+++ b/maps/southern_cross/southern_cross-2.dmm
@@ -5502,7 +5502,7 @@
"dUe" = (/obj/structure/table/standard,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/hydro,/area/hydroponics)
"dUz" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "d2_w1_a_airlock"; landmark_tag = "d2_w1_a"; name = "Deck 2, Dock 1-A"},/turf/space,/area/space)
"dVl" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft)
-"dWl" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 1"; dir = 1},/obj/machinery/vending/wallmed1{pixel_y = -30},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/pink/border,/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"dWl" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 1"; dir = 1},/obj/machinery/vending/wallmed1{pixel_y = -30},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/pink/border,/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/obj/item/weapon/surgical/bioregen,/turf/simulated/floor/tiled/white,/area/medical/surgery)
"dWp" = (/obj/structure/bed/chair/comfy/black,/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge)
"dWC" = (/obj/structure/morgue{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue)
"dWG" = (/obj/machinery/door/airlock/glass_external{frequency = null; icon_state = "door_locked"; locked = 1; name = "Dock One Internal Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/map_helper/airlock/button/int_button,/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/access_button{dir = 4; name = "interior access button"; pixel_x = 7; pixel_y = 27; req_one_access = null},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D1)
@@ -5554,7 +5554,7 @@
"eCo" = (/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/industrial/danger{dir = 6},/turf/simulated/floor/tiled/techfloor/grid,/area/quartermaster/office)
"eDx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock 1 Fore"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"eEy" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/ward)
-"eEW" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 2"; dir = 1},/obj/machinery/vending/wallmed1{pixel_y = -30},/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/pink/border,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"eEW" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 2"; dir = 1},/obj/machinery/vending/wallmed1{pixel_y = -30},/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/pink/border,/obj/item/weapon/surgical/bioregen,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"eEX" = (/obj/machinery/door/airlock/external{frequency = null; icon_state = "door_locked"; id_tag = null; locked = 1; name = "Dock Two External Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/structure/fans/tiny,/obj/effect/map_helper/airlock/door/ext_door,/obj/effect/map_helper/airlock/button/ext_button,/obj/machinery/access_button{dir = 4; name = "exterior access button"; pixel_x = 7; pixel_y = 27; req_one_access = null},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/arrivals)
"eFx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar)
"eFQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
diff --git a/maps/submaps/admin_use_vr/ert.dmm b/maps/submaps/admin_use_vr/ert.dmm
index 6c09554428..e7e7be1271 100644
--- a/maps/submaps/admin_use_vr/ert.dmm
+++ b/maps/submaps/admin_use_vr/ert.dmm
@@ -1,1132 +1,966 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
-/turf/unsimulated/wall,
+/obj/effect/overmap/visitable/ship/ert_ship,
+/turf/space,
/area/space)
"ab" = (
-/turf/unsimulated/wall,
-/area/centcom/specops)
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/barracks)
"ac" = (
-/turf/unsimulated/wall{
- icon = 'icons/obj/doors/Doorext.dmi';
- icon_state = "door_locked";
- name = "Sealed Door"
- },
-/area/centcom/specops)
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_port)
"ad" = (
-/obj/effect/floor_decal/industrial/danger/corner,
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_port)
"ae" = (
-/obj/effect/floor_decal/industrial/danger,
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"af" = (
-/turf/unsimulated/floor{
- icon_state = "steel"
- },
-/area/centcom/specops)
-"ag" = (
-/obj/machinery/embedded_controller/radio/simple_docking_controller{
- frequency = 1380;
- id_tag = "ert_shuttle_bay";
- name = "shuttle bay controller";
- pixel_x = 25;
- pixel_y = 0;
- tag_door = "ert_shuttle_bay_door"
- },
-/turf/unsimulated/floor{
- icon_state = "steel"
- },
-/area/centcom/specops)
-"ah" = (
-/obj/effect/floor_decal/industrial/danger/corner{
- icon_state = "dangercorner";
- dir = 1
- },
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"ai" = (
-/obj/effect/floor_decal/industrial/danger{
- dir = 4
- },
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"aj" = (
-/turf/unsimulated/floor/techfloor_grid,
-/area/centcom/specops)
-"ak" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1380;
- icon_state = "door_locked";
- id_tag = "ert_shuttle_bay_door";
- locked = 1
- },
-/turf/unsimulated/floor{
- icon_state = "steel"
- },
-/area/centcom/specops)
-"al" = (
-/obj/effect/floor_decal/industrial/danger{
- dir = 8
- },
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"am" = (
-/turf/simulated/shuttle/wall/dark/hard_corner,
-/area/shuttle/specops/centcom)
-"an" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1380;
- icon_state = "door_locked";
- id_tag = "ert1_shuttle_outer";
- locked = 1;
- name = "Shuttle Hatch"
- },
-/obj/structure/fans/tiny,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ao" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1380;
- icon_state = "door_locked";
- id_tag = "ert1_shuttle_outer";
- locked = 1;
- name = "Shuttle Hatch"
- },
-/obj/structure/fans/tiny,
-/obj/machinery/access_button{
- command = "cycle_exterior";
- frequency = 1380;
- master_tag = "ert1_control";
+/obj/machinery/door/airlock/external,
+/obj/effect/map_helper/airlock/door/ext_door,
+/obj/machinery/airlock_sensor/airlock_exterior{
+ dir = 1;
pixel_x = 24;
- req_one_access = list(103)
+ pixel_y = 11
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ap" = (
-/turf/simulated/shuttle/wall/dark,
-/area/shuttle/specops/centcom)
-"aq" = (
-/obj/structure/window/reinforced,
-/obj/machinery/door/blast/shutters{
- density = 0;
- icon_state = "shutter0";
- id = "ertstarshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/effect/map_helper/airlock/sensor/ext_sensor,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"af" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"ag" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
},
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"ar" = (
-/obj/structure/window/reinforced,
-/obj/machinery/door/blast/shutters{
- density = 0;
- icon_state = "shutter0";
- id = "ertstarshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"as" = (
-/obj/structure/window/reinforced,
-/obj/machinery/door/blast/shutters{
- density = 0;
- icon_state = "shutter0";
- id = "ertstarshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"at" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 2;
- frequency = 1380;
- id_tag = "ert1_vent"
- },
-/obj/machinery/embedded_controller/radio/airlock/docking_port{
- frequency = 1380;
- id_tag = "ert1_control";
- pixel_x = -25;
- req_access = list(103);
- tag_airpump = "ert1_vent";
- tag_chamber_sensor = "ert1_sensor";
- tag_exterior_door = "ert1_shuttle_outer";
- tag_interior_door = "ert1_shuttle_inner"
- },
-/obj/effect/shuttle_landmark/shuttle_initializer{
- base_area = /area/centcom/specops;
- base_turf = /turf/unsimulated/floor;
- landmark_tag = "specops_base";
- name = "ERT Shuttle Bay";
- shuttle_type = /datum/shuttle/autodock/multi/specialops
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"au" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 0
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 2;
- frequency = 1380;
- id_tag = "ert1_vent"
- },
-/obj/machinery/airlock_sensor{
- frequency = 1380;
- id_tag = "ert1_sensor";
- pixel_x = 25
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"av" = (
-/obj/structure/shuttle/engine/heater{
- icon_state = "heater";
- dir = 4
- },
-/turf/simulated/shuttle/plating/airless,
-/area/shuttle/specops/centcom)
-"aw" = (
-/obj/structure/shuttle/engine/propulsion{
- icon_state = "propulsion_r";
- dir = 4
- },
-/turf/space,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/specops/centcom)
-"ax" = (
-/obj/structure/closet/cabinet,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ay" = (
-/obj/structure/bed/padded,
-/obj/item/weapon/bedsheet/captain,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"az" = (
-/obj/structure/closet/wardrobe/ert,
-/obj/item/modular_computer/laptop/preset/custom_loadout/elite,
-/obj/item/weapon/storage/box/survival/comp{
- starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aA" = (
-/obj/structure/closet/wardrobe/ert,
-/obj/item/modular_computer/laptop/preset/custom_loadout/elite,
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/weapon/storage/box/survival/comp{
- starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aB" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1380;
- icon_state = "door_locked";
- id_tag = "ert1_shuttle_inner";
- locked = 1;
- name = "Shuttle Hatch"
- },
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aC" = (
-/obj/structure/table/steel_reinforced,
-/obj/machinery/chemical_dispenser/ert,
-/obj/item/weapon/reagent_containers/glass/beaker/large,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aD" = (
-/obj/structure/table/steel_reinforced,
-/obj/machinery/chemical_dispenser/biochemistry/full,
-/obj/item/weapon/reagent_containers/glass/beaker/large,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aE" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 4
- },
-/turf/space,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/specops/centcom)
-"aF" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertstarshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"aG" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aH" = (
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aI" = (
-/obj/machinery/door/airlock/silver{
- name = "Sleeping"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aJ" = (
-/obj/effect/landmark/late_antag/ert,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aK" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"ah" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"ai" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"aj" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"ak" = (
/obj/machinery/atmospherics/pipe/simple/visible{
- icon_state = "intact";
dir = 6
},
-/obj/machinery/meter,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aL" = (
-/obj/machinery/atmospherics/pipe/manifold/visible,
-/obj/machinery/access_button{
- command = "cycle_interior";
- frequency = 1380;
- master_tag = "ert1_control";
- pixel_x = -22;
- pixel_y = 32;
- req_one_access = list(103)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aM" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- icon_state = "intact";
- dir = 9
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aN" = (
-/obj/structure/table/rack/steel,
-/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/item/weapon/storage/briefcase/inflatable{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/weapon/storage/briefcase/inflatable{
- pixel_x = 3;
- pixel_y = 3
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aO" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/storage/belt/medical/emt,
-/obj/item/weapon/storage/belt/medical/emt,
-/obj/item/weapon/storage/belt/medical/emt,
-/obj/item/weapon/storage/belt/medical/emt,
-/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,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aP" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/armor/vest/ert/medical,
-/obj/item/clothing/suit/armor/vest/ert/medical,
-/obj/item/clothing/suit/armor/vest/ert/medical,
-/obj/item/clothing/suit/armor/vest/ert/medical,
-/obj/item/clothing/head/helmet/ert/medical,
-/obj/item/clothing/head/helmet/ert/medical,
-/obj/item/clothing/head/helmet/ert/medical,
-/obj/item/clothing/head/helmet/ert/medical,
-/obj/item/weapon/storage/backpack/ert/medical,
-/obj/item/weapon/storage/backpack/ert/medical,
-/obj/item/weapon/storage/backpack/ert/medical,
-/obj/item/weapon/storage/backpack/ert/medical,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aQ" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/rig/ert/medical,
-/obj/item/weapon/rig/ert/medical,
-/obj/item/weapon/rig/ert/medical,
-/obj/item/weapon/rig/ert/medical,
-/obj/item/weapon/reagent_containers/hypospray,
-/obj/item/weapon/reagent_containers/hypospray,
-/obj/item/weapon/reagent_containers/hypospray,
-/obj/item/weapon/reagent_containers/hypospray,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aR" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aS" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertstarshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
+/turf/simulated/wall/rshull,
+/area/ship/ert/dock_port)
+"al" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
dir = 8
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"aT" = (
-/obj/machinery/light,
-/obj/machinery/ntnet_relay,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aU" = (
-/obj/structure/table/bench/padded,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aV" = (
-/obj/machinery/shieldgen,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aW" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/netgun,
-/obj/item/weapon/gun/energy/sniperrifle{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/obj/item/weapon/gun/energy/gun/martin{
- battery_lock = 0
- },
-/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/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aX" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/gun/nuclear,
-/obj/item/weapon/gun/energy/gun/nuclear,
-/obj/item/weapon/gun/energy/gun/nuclear,
-/obj/item/weapon/gun/energy/gun/nuclear,
-/obj/item/weapon/gun/energy/gun/nuclear,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aY" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/gun,
-/obj/item/weapon/gun/energy/gun,
-/obj/item/weapon/gun/energy/gun,
-/obj/item/weapon/gun/energy/gun,
-/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,
-/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/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"aZ" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/projectile/shotgun/pump/combat,
-/obj/item/weapon/gun/projectile/shotgun/pump/combat,
-/obj/item/weapon/storage/box/shotgunshells,
-/obj/item/weapon/storage/box/shotgunshells,
-/obj/item/weapon/storage/box/shotgunshells,
-/obj/item/weapon/storage/box/shotgunammo,
-/obj/item/weapon/storage/box/shotgunammo,
-/obj/item/weapon/storage/box/stunshells,
-/obj/item/weapon/storage/box/stunshells,
-/obj/item/weapon/storage/box/flashshells,
-/obj/item/weapon/storage/box/flashshells,
-/obj/item/weapon/storage/box/beanbags,
-/obj/item/weapon/storage/box/beanbags,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ba" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/projectile/automatic/advanced_smg,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/ammo_magazine/m9mmAdvanced,
-/obj/item/weapon/gun/projectile/revolver/detective45,
-/obj/item/weapon/gun/projectile/revolver/detective45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/obj/item/ammo_magazine/s45,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bb" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/grille,
-/obj/structure/window/reinforced{
+/obj/structure/sign/vacuum{
+ pixel_x = -32
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"am" = (
+/obj/machinery/airlock_sensor{
+ pixel_x = 24
+ },
+/obj/effect/map_helper/airlock/sensor/chamber_sensor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"an" = (
+/obj/structure/table/rack/steel,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ao" = (
+/obj/structure/table/rack/steel,
+/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/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ap" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ax" = (
+/obj/structure/shuttle/engine/propulsion{
dir = 4
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bc" = (
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1";
- pixel_y = 0
+/turf/simulated/floor/reinforced,
+/area/shuttle/ert_ship_boat)
+"az" = (
+/obj/machinery/shipsensors{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/visible,
-/obj/machinery/space_heater,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bd" = (
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"be" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"aC" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"aD" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/fiftyspawner/tritium,
+/obj/fiftyspawner/tritium,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"aI" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"aQ" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/firstaid/surgery,
+/obj/item/stack/nanopaste/advanced,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/item/weapon/surgical/bone_clamp,
+/obj/item/weapon/surgical/scalpel/manager,
+/obj/item/weapon/surgical/circular_saw/manager,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"aV" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/eng_storage)
+"bg" = (
+/turf/space,
+/turf/space,
+/area/space)
+"bp" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"br" = (
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"bt" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"bI" = (
+/obj/structure/table/rack/steel,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"bJ" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 8
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"bM" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/mech_bay)
+"bO" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/atmos)
+"bR" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/atmos)
+"bW" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/atmos)
+"ch" = (
+/obj/machinery/door/airlock/glass_external,
+/obj/effect/map_helper/airlock/door/int_door,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"ci" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"ck" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"cl" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_near_aft,
+/turf/space,
+/area/space)
+"cs" = (
+/obj/machinery/atmospherics/pipe/tank/air{
+ dir = 4;
+ start_pressure = 740.5
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"cu" = (
+/obj/machinery/shipsensors,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engineering)
+"cv" = (
+/obj/machinery/shield_gen,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"cC" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"cJ" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hallways_aft)
+"cO" = (
+/obj/machinery/computer/operating,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"cP" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"cS" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/hallways_aft)
+"cV" = (
+/obj/machinery/vending/assist,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"cW" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 1;
+ name = "VB APC - North";
+ pixel_y = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"cY" = (
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"dd" = (
+/obj/machinery/atmospherics/pipe/manifold/visible,
+/turf/simulated/wall/shull,
+/area/ship/ert/dock_port)
+"dg" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 8
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"dk" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/powered/pump/filled,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"dn" = (
+/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{
+ dir = 8;
+ id_tag = "von_braun_port";
+ master_tag = "von_braun_master";
+ name = "Port Docking Control";
+ pixel_x = 22
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"do" = (
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"dp" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/item/weapon/rig/ert/assetprotection,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"dq" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/med_surg)
+"dr" = (
+/obj/structure/table/rack/steel,
+/obj/item/toy/plushie/squid/blue{
+ desc = "A small, cute and loveable squid friend. This one is blue. Despite the name, it seems no more or less deadly than your regular plush squid.";
+ name = "NT 'Deathsquid' Plushie"
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ds" = (
+/obj/structure/table/rack,
+/obj/item/weapon/storage/backpack/ert/commander,
+/obj/item/clothing/suit/space/void/responseteam/command,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"dx" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"dA" = (
/obj/machinery/door/airlock/glass_medical{
name = "Medical Bay";
req_access = list(103)
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bf" = (
-/obj/machinery/chem_master,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bg" = (
-/obj/structure/shuttle/engine/propulsion{
- icon_state = "propulsion_l";
- dir = 4
- },
-/turf/space,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/specops/centcom)
-"bh" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_y = -32
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bi" = (
-/obj/machinery/button/remote/blast_door{
- id = "ertstarshutters";
- name = "remote shutter control";
- pixel_x = 30;
- req_access = list(160)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bj" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"dB" = (
/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/laser,
-/obj/item/weapon/gun/energy/laser,
-/obj/item/weapon/gun/energy/laser,
-/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,
-/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/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bk" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 9
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/suit/armor/swat,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/mask/gas/commando,
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bl" = (
-/obj/effect/floor_decal/industrial/warning{
- icon_state = "warning";
- dir = 1
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bm" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bn" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/projectile/automatic/sts35,
-/obj/item/weapon/gun/projectile/automatic/sts35,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bo" = (
-/obj/structure/window/reinforced{
- dir = 8
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
},
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
+ },
+/obj/item/clothing/head/helmet/space/deathsquad{
+ name = "swat helmet"
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"dT" = (
+/obj/machinery/door/firedoor,
/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bp" = (
-/obj/machinery/atmospherics/pipe/simple/visible,
-/obj/machinery/meter,
-/obj/machinery/portable_atmospherics/powered/pump/filled,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bq" = (
-/obj/machinery/light,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"br" = (
-/obj/machinery/vending/medical{
- density = 0;
- pixel_y = -32;
- req_access = null
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bs" = (
-/obj/structure/closet/medical_wall{
- pixel_x = 32;
- pixel_y = 0
- },
-/obj/item/weapon/storage/firstaid/clotting,
-/obj/item/weapon/storage/firstaid/bonemed,
-/obj/item/weapon/storage/firstaid/adv,
-/obj/item/weapon/storage/firstaid/adv,
-/obj/item/weapon/storage/firstaid/fire,
-/obj/item/weapon/storage/firstaid/fire,
-/obj/item/weapon/storage/firstaid/o2,
-/obj/item/weapon/storage/firstaid/o2,
-/obj/item/weapon/storage/firstaid/toxin,
-/obj/item/weapon/storage/firstaid/toxin,
-/obj/item/weapon/storage/firstaid/combat,
-/obj/item/weapon/storage/firstaid/combat,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bt" = (
-/obj/machinery/door/airlock/multi_tile/glass{
- dir = 4;
- req_access = list(103)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bu" = (
+/obj/structure/window/reinforced/full,
/obj/structure/window/reinforced,
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/ionrifle,
-/obj/item/weapon/gun/energy/ionrifle,
-/obj/item/weapon/gun/energy/ionrifle/pistol,
-/obj/item/weapon/gun/energy/ionrifle/pistol,
-/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/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bv" = (
-/obj/machinery/door/window/southleft{
- name = "Cargo Hold";
- req_access = list(103)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bw" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/rack/steel,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/ammo_magazine/m9mm/large/preban,
-/obj/item/weapon/gun/projectile/p92x/large/preban,
-/obj/item/weapon/gun/projectile/p92x/large/preban,
-/obj/item/weapon/gun/projectile/p92x/large/preban,
-/obj/item/weapon/gun/projectile/p92x/large/preban,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bx" = (
-/obj/machinery/door/window/southright{
- name = "Cargo Hold";
- req_access = list(103)
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"by" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/projectile/automatic/sts35,
-/obj/item/weapon/gun/projectile/automatic/sts35,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/obj/item/ammo_magazine/m545,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bz" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bA" = (
-/obj/machinery/atmospherics/pipe/tank/air{
- dir = 1;
- start_pressure = 740.5
- },
-/obj/effect/floor_decal/industrial/outline,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bB" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/weapon/storage/box/pillbottles,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bC" = (
-/obj/structure/closet/crate/medical,
-/obj/item/weapon/storage/mre/menu11,
-/obj/item/weapon/storage/mre/menu11,
-/obj/item/weapon/storage/mre/menu11,
-/obj/item/weapon/storage/mre/menu11,
-/obj/item/stack/nanopaste/advanced,
-/obj/item/stack/nanopaste/advanced,
-/obj/item/stack/nanopaste/advanced,
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose,
-/obj/item/weapon/storage/pill_bottle/iron,
-/obj/item/weapon/storage/pill_bottle/iron,
-/obj/item/weapon/storage/pill_bottle/sleevingcure/full,
-/obj/item/weapon/extinguisher/mini,
-/obj/item/weapon/extinguisher/mini,
-/obj/item/weapon/extinguisher/mini,
-/obj/item/weapon/extinguisher/mini,
-/obj/item/weapon/storage/box/syringes,
-/obj/item/weapon/storage/box/syringes{
- pixel_x = 2;
- pixel_y = 2
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bD" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/machinery/door/blast/regular/open{
+ dir = 8;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
},
/obj/structure/window/reinforced{
dir = 1
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bE" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"dV" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/glasses/thermal,
+/obj/item/clothing/glasses/thermal,
+/obj/item/clothing/glasses/thermal,
+/obj/item/clothing/glasses/thermal,
+/obj/item/clothing/glasses/thermal,
+/obj/item/clothing/glasses/thermal,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"dW" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
},
-/obj/structure/window/reinforced{
- dir = 4
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"dX" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
},
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/engineering{
+ req_one_access = list(103)
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bF" = (
-/obj/machinery/vending/security,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bG" = (
-/obj/machinery/atm{
- pixel_x = 0;
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"dY" = (
+/obj/machinery/door/airlock/glass_external,
+/obj/effect/map_helper/airlock/door/int_door,
+/obj/machinery/door/firedoor/multi_tile,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"ee" = (
+/obj/machinery/door/airlock/glass_external,
+/obj/effect/map_helper/airlock/door/int_door,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"ef" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/machinery/firealarm/alarms_hidden{
pixel_y = 26
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bH" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bI" = (
-/obj/machinery/vending/nifsoft_shop{
- categories = 111;
- emagged = 1;
- name = "Hacked NIFSoft Shop";
- prices = list()
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bJ" = (
-/obj/machinery/door/airlock/multi_tile/glass{
- req_access = list(103)
- },
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"bK" = (
-/obj/machinery/sleep_console{
- dir = 8
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bL" = (
-/obj/machinery/sleeper{
- dir = 4
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bM" = (
-/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/shuttle/specops/centcom)
-"bN" = (
-/obj/machinery/vending/food,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bO" = (
-/obj/structure/toilet,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bP" = (
-/obj/structure/sink{
- icon_state = "sink";
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
- },
-/obj/machinery/light/small,
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bQ" = (
-/obj/structure/mirror{
- pixel_x = 0;
- pixel_y = 28
- },
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bR" = (
-/obj/structure/curtain/open/shower,
-/obj/machinery/shower{
- pixel_y = 3
- },
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bS" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"eg" = (
/obj/structure/table/rack/steel,
-/obj/item/weapon/rig/ert/security,
-/obj/item/weapon/rig/ert/security,
-/obj/item/weapon/rig/ert/security,
-/obj/item/weapon/rig/ert/security,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bT" = (
-/obj/structure/closet/crate/medical,
-/obj/item/weapon/storage/box/autoinjectors,
-/obj/item/weapon/storage/box/beakers,
-/obj/item/device/defib_kit/compact/combat/loaded,
-/obj/item/device/defib_kit/compact/combat/loaded,
-/obj/item/weapon/storage/box/bodybags,
-/obj/item/weapon/storage/box/bodybags{
- pixel_x = 2;
- pixel_y = 2
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/machinery/atm{
+ pixel_y = 26
},
-/obj/item/weapon/storage/box/gloves,
-/obj/item/weapon/storage/box/freezer,
-/obj/item/weapon/storage/box/masks,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bU" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"es" = (
+/obj/structure/closet/crate{
+ dir = 2
},
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/item/ammo_magazine/m9mml/ap,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"et" = (
+/obj/machinery/atmospherics/pipe/manifold4w/visible/fuel,
/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 4
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular/open{
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
},
/obj/structure/window/reinforced{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 1
+/turf/simulated/floor/plating,
+/area/ship/ert/engine)
+"eD" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med)
+"eF" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"eH" = (
+/obj/structure/sign/department/cargo{
+ name = "ENGINEERING SUPPLIES"
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"bV" = (
-/obj/structure/frame/computer,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"bW" = (
-/obj/machinery/light{
+/turf/simulated/wall/rshull,
+/area/ship/ert/bridge)
+"eI" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/item/device/perfect_tele_beacon/stationary{
- tele_name = "ERT";
- tele_network = "centcom"
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/newscaster{
- pixel_x = 32
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"eP" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/item/weapon/storage/box/cdeathalarm_kit,
+/obj/item/weapon/storage/box/cdeathalarm_kit,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"eX" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/item/weapon/storage/box/backup_kit,
+/obj/item/weapon/storage/box/backup_kit,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ff" = (
+/obj/machinery/vending/fitness,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"fj" = (
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ dir = 4;
+ id = "NRV_DELTA";
+ layer = 4
},
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"bX" = (
-/obj/machinery/door/airlock/silver{
- name = "Toilet"
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"fk" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
},
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bY" = (
-/obj/machinery/door/airlock/silver{
- name = "Restroom"
+/obj/machinery/meter,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ name = "VB APC - South";
+ pixel_y = -24
},
-/turf/simulated/shuttle/floor/white,
-/area/shuttle/specops/centcom)
-"bZ" = (
-/obj/structure/undies_wardrobe,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ca" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/armor/vest/ert/security,
-/obj/item/clothing/suit/armor/vest/ert/security,
-/obj/item/clothing/suit/armor/vest/ert/security,
-/obj/item/clothing/suit/armor/vest/ert/security,
-/obj/item/clothing/head/helmet/ert/security,
-/obj/item/clothing/head/helmet/ert/security,
-/obj/item/clothing/head/helmet/ert/security,
-/obj/item/clothing/head/helmet/ert/security,
-/obj/item/weapon/storage/backpack/ert/security,
-/obj/item/weapon/storage/backpack/ert/security,
-/obj/item/weapon/storage/backpack/ert/security,
-/obj/item/weapon/storage/backpack/ert/security,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cb" = (
-/obj/item/taperoll/police,
-/obj/item/taperoll/police,
-/obj/item/taperoll/police,
-/obj/item/taperoll/police,
-/obj/item/taperoll/police,
-/obj/item/taperoll/police,
-/obj/item/device/flash,
-/obj/item/device/flash,
-/obj/item/device/flash,
-/obj/item/device/flash,
-/obj/item/device/flash,
-/obj/item/device/flash,
-/obj/structure/table/rack/steel,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cc" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/storage/box/flashbangs,
-/obj/item/weapon/storage/box/flashbangs,
-/obj/item/weapon/storage/box/flashbangs,
-/obj/item/weapon/storage/box/emps{
- pixel_x = 4;
- pixel_y = 4
+/obj/structure/cable/yellow,
+/obj/machinery/light/small{
+ dir = 4
},
-/obj/item/weapon/storage/box/smokes,
-/obj/item/weapon/storage/box/smokes,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cd" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/storage/box/handcuffs,
-/obj/item/weapon/storage/box/handcuffs{
- pixel_x = 3;
- pixel_y = 3
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"fx" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/rig_module/rescue_pharm,
+/obj/item/rig_module/sprinter,
+/obj/item/rig_module/sprinter,
+/obj/machinery/light/no_nightshift{
+ dir = 8
},
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"ce" = (
-/obj/structure/table/rack/steel,
-/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,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/obj/item/clothing/accessory/storage/black_drop_pouches,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cf" = (
-/obj/structure/table/rack/steel,
-/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/flashlight,
-/obj/item/device/flashlight,
-/obj/item/device/flashlight,
-/obj/item/device/flashlight,
-/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/item/device/radio/off,
-/obj/item/device/radio/off,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cg" = (
-/obj/machinery/power/thermoregulator,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"ch" = (
-/obj/machinery/portable_atmospherics/powered/scrubber,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"ci" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cj" = (
-/obj/machinery/power/emitter,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"ck" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/item/rig_module/sprinter,
+/obj/item/rig_module/sprinter,
+/obj/item/rig_module/rescue_pharm,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"fE" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/rig_module/mounted,
+/obj/item/rig_module/mounted/egun,
+/obj/item/rig_module/mounted/egun,
+/obj/item/rig_module/mounted,
+/obj/item/rig_module/mounted/egun,
+/obj/item/rig_module/mounted/egun,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"fP" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/rig_module/chem_dispenser/combat,
+/obj/item/rig_module/chem_dispenser/combat,
+/obj/item/rig_module/chem_dispenser/injector,
+/obj/item/rig_module/chem_dispenser/injector,
+/obj/item/rig_module/device/healthscanner,
+/obj/item/rig_module/device/healthscanner,
+/obj/item/rig_module/device/healthscanner,
+/obj/item/rig_module/device/healthscanner,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"fU" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/rig_module/device/rcd,
+/obj/item/rig_module/device/rcd,
+/obj/item/rig_module/device/plasmacutter,
+/obj/item/rig_module/device/plasmacutter,
+/obj/item/rig_module/device/rcd,
+/obj/item/rig_module/device/rcd,
+/obj/item/rig_module/device/plasmacutter,
+/obj/item/rig_module/device/plasmacutter,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"fZ" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/rig_module/device/drill,
+/obj/item/rig_module/device/drill,
+/obj/item/rig_module/maneuvering_jets,
+/obj/item/rig_module/maneuvering_jets,
+/obj/item/rig_module/maneuvering_jets,
+/obj/item/rig_module/maneuvering_jets,
+/obj/item/rig_module/maneuvering_jets,
+/obj/item/rig_module/maneuvering_jets,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"ga" = (
+/obj/structure/sign/department/operational{
+ name = "MEDICAL & SURGERY"
+ },
+/turf/simulated/wall/shull,
+/area/ship/ert/med_surg)
+"gf" = (
/obj/machinery/bodyscanner{
dir = 8
},
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cl" = (
-/obj/machinery/body_scanconsole,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cm" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"gh" = (
+/obj/machinery/mech_recharger,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/mecha/combat/gygax/serenity,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"gk" = (
+/obj/machinery/shieldwallgen,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"gn" = (
+/obj/machinery/light/no_nightshift,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"gw" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
+/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/medanalyzer,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun,
+/obj/item/mecha_parts/mecha_equipment/tool/sleeper,
+/obj/item/mecha_parts/mecha_equipment/tool/sleeper,
+/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"gx" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/melee/baton,
+/obj/item/weapon/melee/baton,
+/obj/item/weapon/melee/baton,
+/obj/item/weapon/melee/baton,
+/obj/item/weapon/shield/riot,
+/obj/item/weapon/shield/riot,
+/obj/item/weapon/shield/riot,
+/obj/item/weapon/shield/riot,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = 5
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -4
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -12
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"gy" = (
+/obj/machinery/mech_recharger,
+/obj/mecha/combat/gygax,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"gA" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"gF" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/shocker,
+/obj/item/mecha_parts/mecha_equipment/shocker,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 1;
+ name = "VB APC - North";
+ pixel_y = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"gN" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"gR" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"gW" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,
+/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,
+/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,
+/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"gX" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/emps,
+/obj/item/weapon/storage/box/emps,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"gZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"ha" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"hj" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/combat_shield,
+/obj/item/mecha_parts/mecha_equipment/combat_shield,
+/obj/item/mecha_parts/mecha_equipment/omni_shield,
+/obj/item/mecha_parts/mecha_equipment/repair_droid,
+/obj/item/mecha_parts/mecha_equipment/repair_droid,
+/obj/item/mecha_parts/mecha_equipment/repair_droid,
+/obj/item/mecha_parts/mecha_equipment/repair_droid,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"hk" = (
+/obj/structure/table/rack/steel,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"hs" = (
+/obj/machinery/pointdefense_control{
+ id_tag = "vonbraun_pd"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"hv" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"hx" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"hH" = (
+/obj/machinery/airlock_sensor{
+ pixel_y = 21
+ },
+/obj/effect/map_helper/airlock/sensor/int_sensor,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"hN" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"hP" = (
+/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/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"hS" = (
/obj/structure/closet/crate/freezer,
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/item/weapon/reagent_containers/blood/OMinus,
@@ -1136,193 +970,1161 @@
/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/black,
-/area/shuttle/specops/centcom)
-"cn" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
},
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 4
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"hU" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
},
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"hV" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"hW" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hangar)
+"hY" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_star)
+"ia" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/accessory/holster/leg,
+/obj/item/clothing/accessory/holster/leg,
+/obj/item/clothing/accessory/holster/leg,
+/obj/item/clothing/accessory/holster/leg,
+/obj/item/clothing/accessory/holster/leg,
+/obj/item/clothing/accessory/holster/leg,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"ib" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hangar)
+"ij" = (
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"ik" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"ip" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"ix" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/obj/structure/sign/warning/airlock{
+ pixel_y = -32
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"iy" = (
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"iA" = (
/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"iB" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/dock_port)
+"iC" = (
+/obj/item/device/healthanalyzer/advanced,
+/obj/item/device/healthanalyzer/advanced,
+/obj/item/device/healthanalyzer/advanced,
+/obj/structure/table/rack/steel,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"co" = (
-/obj/machinery/computer/shuttle_control/multi/specops{
- icon_state = "computer";
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"iO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"iR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cp" = (
-/obj/structure/bed/chair{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
},
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cq" = (
-/obj/machinery/door/airlock/command{
- name = "Bridge";
- req_access = list(103)
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"iW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cr" = (
-/obj/structure/noticeboard{
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"iX" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"jn" = (
+/obj/machinery/chem_master,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"jv" = (
+/obj/machinery/computer/cryopod/ert{
pixel_y = 32
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cs" = (
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"jz" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"jA" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"jD" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"jI" = (
+/obj/machinery/teleport/station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"jK" = (
+/obj/machinery/door/airlock/glass_engineering{
+ name = "Engineering";
+ req_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"jQ" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"jU" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"jY" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"kf" = (
/obj/structure/table/rack/steel,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/graviton,
-/obj/item/clothing/glasses/graviton,
-/obj/item/clothing/glasses/graviton,
-/obj/item/clothing/glasses/graviton,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"ct" = (
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/weapon/gun/projectile/automatic/pdw,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/item/ammo_magazine/m9mml,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"kh" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"ki" = (
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"kl" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"km" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"kn" = (
/obj/structure/table/rack/steel,
-/obj/item/weapon/gun/energy/stunrevolver,
-/obj/item/weapon/gun/energy/stunrevolver,
-/obj/item/weapon/gun/energy/stunrevolver,
-/obj/item/weapon/gun/energy/stunrevolver,
-/obj/item/weapon/gun/energy/taser,
-/obj/item/weapon/gun/energy/taser,
-/obj/item/weapon/gun/energy/taser,
-/obj/item/weapon/gun/energy/taser,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cu" = (
-/obj/structure/table/rack/steel,
-/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/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cv" = (
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"kt" = (
+/obj/machinery/door/blast/regular/open{
+ id = "ERT_Shuttle_Rear";
+ name = "Boarding Hatch"
+ },
+/obj/machinery/button/remote/blast_door{
+ id = "ERT_Shuttle_Rear";
+ name = "ERT Shuttle Access";
+ pixel_y = 24;
+ req_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"kx" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"kz" = (
+/obj/structure/closet/crate{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/item/weapon/plastique,
+/obj/item/weapon/plastique,
+/obj/item/weapon/plastique,
+/obj/item/weapon/plastique,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"kG" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"kJ" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/atmos)
+"kL" = (
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"kM" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"kO" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/barracks)
+"kP" = (
+/obj/machinery/atmospherics/pipe/tank/air{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"kS" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"kT" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"kW" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/dock_star)
+"kX" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 1
+ },
+/turf/simulated/wall/shull,
+/area/ship/ert/dock_star)
+"kY" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"lm" = (
+/obj/effect/floor_decal/industrial/outline/blue,
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"lq" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"ls" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/canister/empty,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"lu" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"lv" = (
+/obj/structure/closet/wardrobe/ert,
+/obj/item/modular_computer/tablet/preset/custom_loadout/elite,
+/obj/item/weapon/storage/box/survival/comp{
+ starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi)
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"lx" = (
+/obj/machinery/door/airlock/external,
+/obj/machinery/airlock_sensor/airlock_exterior{
+ pixel_x = 24;
+ pixel_y = -11
+ },
+/obj/effect/map_helper/airlock/door/ext_door,
+/obj/effect/map_helper/airlock/sensor/ext_sensor,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"lz" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"lB" = (
+/obj/item/modular_computer/console/preset/engineering{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"lL" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"lO" = (
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"lR" = (
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"lV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"lX" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"lZ" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"mb" = (
/obj/structure/table/rack/steel,
/obj/item/weapon/storage/belt/security/tactical,
/obj/item/weapon/storage/belt/security/tactical,
/obj/item/weapon/storage/belt/security/tactical,
/obj/item/weapon/storage/belt/security/tactical,
+/obj/item/weapon/storage/belt/security/tactical,
+/obj/item/weapon/storage/belt/security/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,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cw" = (
+/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/techfloor,
+/area/ship/ert/barracks)
+"mh" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"mj" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"mq" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"mr" = (
+/obj/structure/reagent_dispensers/water_cooler/full,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"mt" = (
+/obj/structure/cable/green,
+/obj/structure/cable/green{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/structure/cable/green{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/obj/structure/cable/green{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"my" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"mC" = (
+/obj/structure/cable/yellow{
+ 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/tiled/techmaint,
+/area/ship/ert/barracks)
+"mF" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"mH" = (
+/obj/structure/bed/chair/bay/shuttle,
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = 5
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -4
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -12
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"mI" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1;
+ req_one_access = list(103)
+ },
+/obj/machinery/door/airlock/multi_tile/glass{
+ dir = 1;
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"mJ" = (
+/obj/structure/table/steel_reinforced,
+/obj/fiftyspawner/durasteel,
+/obj/fiftyspawner/durasteel,
+/obj/fiftyspawner/durasteel,
+/obj/fiftyspawner/durasteel,
+/obj/fiftyspawner/titanium_glass,
+/obj/fiftyspawner/titanium_glass,
+/obj/fiftyspawner/titanium_glass,
+/obj/fiftyspawner/titanium_glass,
+/obj/fiftyspawner/plastitanium_glass,
+/obj/fiftyspawner/plastitanium_glass,
+/obj/fiftyspawner/plastitanium_glass,
+/obj/fiftyspawner/plastitanium_glass,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"mN" = (
+/obj/machinery/sleep_console{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"mR" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"mT" = (
+/obj/structure/cable/yellow{
+ 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 = 5
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"mV" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/barracks)
+"mZ" = (
+/obj/structure/cable/yellow{
+ 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/firedoor/multi_tile{
+ dir = 1
+ },
+/obj/machinery/door/airlock/multi_tile/glass{
+ dir = 1;
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"na" = (
+/obj/machinery/airlock_sensor{
+ pixel_y = -23
+ },
+/obj/effect/map_helper/airlock/sensor/int_sensor,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"nb" = (
/obj/structure/table/rack/steel,
-/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/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/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/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cx" = (
-/obj/machinery/power/port_gen/pacman,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cy" = (
+/obj/item/weapon/gun/energy/xray,
+/obj/item/weapon/gun/energy/xray,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/machinery/light/no_nightshift,
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"nc" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/barracks)
+"nl" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med_surg)
+"nn" = (
+/obj/machinery/door/airlock/glass_engineering{
+ name = "Engineering";
+ req_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ 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/firedoor/multi_tile{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"no" = (
+/obj/machinery/photocopier,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"np" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/mech_bay)
+"nq" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"nt" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"nv" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"nx" = (
+/obj/structure/cable/yellow{
+ 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,
+/obj/machinery/door/airlock/glass_engineeringatmos{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/atmos)
+"nz" = (
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/obj/structure/cable/yellow{
+ 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/firedoor/multi_tile{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"nB" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"nC" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_star)
+"nM" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"nP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/mech_bay)
+"nR" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang,
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/clusterbang,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"nX" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/engine{
+ dir = 4
+ },
+/turf/space,
+/area/ship/ert/engine)
+"nY" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"oa" = (
+/obj/structure/table/rack,
+/obj/item/weapon/hand_tele,
+/obj/item/device/perfect_tele,
+/obj/item/device/binoculars,
+/obj/item/device/survivalcapsule,
+/obj/item/device/survivalcapsule,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"og" = (
+/obj/machinery/door/firedoor/glass,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced,
+/obj/machinery/door/blast/regular/open{
+ dir = 8;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"oi" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/hangar)
+"oj" = (
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"ok" = (
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"op" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/yellow{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"os" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"oy" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"oC" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"oN" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_near_fore,
+/turf/space,
+/area/space)
+"oO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"oQ" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"oV" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"oW" = (
+/obj/structure/table/rack/steel,
+/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,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"oX" = (
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/item/clothing/gloves/yellow,
+/obj/item/clothing/gloves/yellow,
+/obj/item/clothing/gloves/yellow,
+/obj/item/weapon/storage/backpack/ert/engineer,
+/obj/item/weapon/storage/backpack/ert/engineer,
+/obj/item/weapon/storage/backpack/ert/engineer,
+/obj/item/clothing/suit/space/void/responseteam/engineer,
+/obj/item/clothing/suit/space/void/responseteam/engineer,
+/obj/item/clothing/suit/space/void/responseteam/engineer,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"pa" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/weapon/storage/belt/medical/emt,
+/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/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"pb" = (
/obj/structure/medical_stand,
/obj/structure/sink{
dir = 4;
- icon_state = "sink";
pixel_x = 12;
pixel_y = 8
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cz" = (
-/obj/structure/table/steel_reinforced,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cA" = (
-/obj/structure/table/steel_reinforced,
-/obj/machinery/button/remote/blast_door{
- id = "ertbridgeshutters";
- name = "remote shutter control";
- pixel_x = 30;
- req_access = list(150)
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"pd" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/machinery/light/no_nightshift,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"pf" = (
+/obj/effect/landmark/map_data/ert_ship,
+/turf/space,
+/area/space)
+"pm" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cB" = (
-/obj/machinery/computer/teleporter{
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"pn" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/weapon/storage/backpack/ert/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/item/clothing/suit/space/void/responseteam/medical,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"po" = (
+/obj/machinery/door/airlock/glass_medical{
+ name = "Medical Bay";
+ req_access = list(103)
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"pq" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/box/syringes,
+/obj/item/weapon/storage/box/syringes,
+/obj/item/weapon/storage/box/bodybags,
+/obj/item/weapon/storage/box/bodybags,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"pt" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/suit/space/void/responseteam/janitor,
+/obj/item/clothing/suit/space/void/responseteam/janitor,
+/obj/item/clothing/suit/space/void/responseteam/janitor,
+/obj/item/clothing/suit/space/void/responseteam/janitor,
+/obj/item/weapon/storage/belt/janitor,
+/obj/item/weapon/storage/belt/janitor,
+/obj/item/weapon/storage/belt/janitor,
+/obj/item/weapon/storage/belt/janitor,
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"pv" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"pz" = (
+/obj/structure/cable/yellow{
+ 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/firedoor/multi_tile{
dir = 1
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cC" = (
-/obj/machinery/teleport/station,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cD" = (
-/obj/machinery/teleport/hub,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cE" = (
-/obj/machinery/light,
-/obj/structure/table/standard,
-/obj/item/weapon/soap,
-/obj/item/weapon/soap,
-/obj/item/weapon/soap,
-/obj/item/weapon/soap,
-/obj/item/weapon/towel{
- color = "#0000FF"
+/obj/machinery/door/airlock/multi_tile/glass{
+ dir = 1;
+ req_one_access = list(103)
},
-/obj/item/weapon/towel{
- color = "#0000FF"
- },
-/obj/item/weapon/towel{
- color = "#0000FF"
- },
-/obj/item/weapon/towel{
- color = "#0000FF"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cF" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"pA" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"pG" = (
/obj/structure/closet{
name = "custodial"
},
@@ -1343,107 +2145,84 @@
/obj/item/device/lightreplacer,
/obj/item/weapon/storage/box/lights/mixed,
/obj/item/weapon/storage/box/lights/mixed,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cH" = (
-/obj/structure/table/glass,
-/obj/item/roller/adv,
-/obj/item/roller/adv{
- pixel_y = 6
- },
-/obj/item/roller/adv{
- pixel_y = 12
- },
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"cI" = (
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"pI" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/automatic/sts35,
+/obj/item/weapon/gun/projectile/automatic/sts35,
+/obj/item/weapon/gun/projectile/automatic/sts35,
+/obj/item/weapon/gun/projectile/automatic/sts35,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ext,
+/obj/item/ammo_magazine/m545/ap/ext,
+/obj/item/ammo_magazine/m545/ap/ext,
+/obj/item/ammo_magazine/m545/ap/ext,
+/obj/item/ammo_magazine/m545/ap/ext,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"pK" = (
+/obj/structure/sign/department/eng{
+ name = "RIG AND MECH BAY"
},
+/turf/simulated/wall/shull,
+/area/ship/ert/mech_bay)
+"pM" = (
/obj/structure/table/steel_reinforced,
-/obj/item/weapon/storage/firstaid/surgery,
-/obj/item/stack/nanopaste,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cJ" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 2;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
+/obj/item/rig_module/mounted/taser,
+/obj/item/rig_module/mounted/taser,
+/obj/item/rig_module/mounted/taser,
+/obj/machinery/light/no_nightshift{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 1
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
},
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"cK" = (
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 2;
- icon_state = "shutter0";
- id = "ertbridgeshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/item/rig_module/mounted/taser,
+/obj/item/rig_module/mounted/taser,
+/obj/item/rig_module/mounted/taser,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"pN" = (
+/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{
+ dir = 8;
+ id_tag = "von_braun_star";
+ master_tag = "von_braun_master";
+ name = "Starboard Docking Control";
+ pixel_x = 22
},
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"cL" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"pS" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_near_port,
+/turf/space,
+/area/space)
+"pU" = (
+/obj/machinery/body_scanconsole,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"pV" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/atmos)
+"pW" = (
/obj/structure/table/rack/steel,
-/obj/item/weapon/melee/energy/sword/blue,
-/obj/item/weapon/melee/energy/sword/blue,
-/obj/item/weapon/melee/energy/sword/blue,
-/obj/item/weapon/melee/energy/sword/blue,
-/obj/item/weapon/melee/energy/sword/blue,
-/obj/item/weapon/shield/energy,
-/obj/item/weapon/shield/energy,
-/obj/item/weapon/shield/energy,
-/obj/item/weapon/shield/energy,
-/obj/item/weapon/shield/energy,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cM" = (
-/obj/machinery/shieldwallgen,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cN" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cO" = (
-/obj/machinery/computer/operating{
- dir = 1
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cP" = (
-/obj/machinery/optable,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cQ" = (
-/obj/machinery/oxygen_pump/anesthetic,
-/turf/simulated/shuttle/wall/dark/hard_corner,
-/area/shuttle/specops/centcom)
-"cR" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
+/obj/item/weapon/gun/energy/plasmastun,
+/obj/item/weapon/gun/energy/plasmastun,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"pY" = (
/obj/structure/table/steel_reinforced,
/obj/item/weapon/cell/hyper,
/obj/item/weapon/cell/hyper,
@@ -1458,162 +2237,1355 @@
/obj/item/weapon/cell/hyper,
/obj/item/weapon/cell/hyper,
/obj/item/weapon/cell/hyper,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cS" = (
-/obj/machinery/door/window/northleft{
- name = "Cargo Hold";
- req_access = list(103)
+/obj/item/weapon/tool/screwdriver,
+/obj/item/weapon/tool/wrench,
+/obj/item/weapon/tool/crowbar,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qa" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/rig/ert/security,
+/obj/item/weapon/rig/ert/security,
+/obj/item/weapon/rig/ert/security,
+/obj/item/weapon/rig/ert/security,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qd" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/rig/ert/engineer,
+/obj/item/weapon/rig/ert/engineer,
+/obj/item/weapon/rig/ert/engineer,
+/obj/item/weapon/rig/ert/engineer,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"ql" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cT" = (
-/obj/structure/window/reinforced{
- dir = 1
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"qo" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/rig/ert/medical,
+/obj/item/weapon/rig/ert/medical,
+/obj/item/weapon/rig/ert/medical,
+/obj/item/weapon/rig/ert/medical,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qt" = (
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
},
/obj/structure/table/steel_reinforced,
-/obj/item/weapon/storage/belt/utility/full,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cU" = (
-/obj/machinery/door/window/northright{
- name = "Cargo Hold";
- req_access = list(103)
+/obj/fiftyspawner/uranium,
+/obj/fiftyspawner/uranium,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"qy" = (
+/obj/structure/sign/department/eng{
+ desc = "ACCESS VIA DIRECT AUTHORIZATION FROM CENTRAL ONLY.";
+ name = "MECH BAY"
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cV" = (
-/obj/structure/window/reinforced{
+/turf/simulated/wall/rshull,
+/area/ship/ert/mech_bay)
+"qz" = (
+/obj/mecha/working/ripley/firefighter,
+/obj/machinery/mech_recharger,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qA" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
dir = 1
},
-/obj/structure/dispenser/oxygen,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cW" = (
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"qD" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
+/obj/item/mecha_parts/mecha_equipment/tool/rcd,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver,
+/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding,
+/obj/item/mecha_parts/mecha_equipment/speedboost,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qE" = (
+/obj/machinery/mech_recharger,
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/mecha/combat/durand,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qF" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/eng_storage)
+"qQ" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/gravcatapult,
+/obj/item/mecha_parts/mecha_equipment/wormhole_generator,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qR" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"qS" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/tool/jetpack,
+/obj/item/mecha_parts/mecha_equipment/tool/jetpack,
+/obj/item/mecha_parts/mecha_equipment/tool/jetpack,
+/obj/item/mecha_parts/mecha_equipment/tool/jetpack,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"qT" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"rp" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray,
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/xray,
+/obj/machinery/light/no_nightshift,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"rr" = (
+/obj/structure/table/rack/steel,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag,
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/grenade/frag,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"rs" = (
+/obj/machinery/atmospherics/pipe/simple/visible/universal,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"rt" = (
/obj/machinery/atmospherics/pipe/tank/air{
- dir = 2;
+ dir = 4;
start_pressure = 740.5
},
-/obj/effect/floor_decal/industrial/outline,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cX" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_y = 32
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"ry" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cY" = (
-/obj/machinery/vending/engivend,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"cZ" = (
-/obj/machinery/vending/assist,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"da" = (
-/obj/structure/table/rack,
-/obj/item/weapon/rig/ert,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"db" = (
-/obj/machinery/button/remote/blast_door{
- id = "ertportshutters";
- name = "remote shutter control";
- pixel_x = 30;
- req_access = list(160)
- },
-/obj/structure/table/rack,
-/obj/item/clothing/suit/space/void/responseteam/command,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dc" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/rig_module/mounted/taser,
-/obj/item/rig_module/mounted/taser,
-/obj/item/rig_module/mounted/taser,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dd" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"de" = (
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"df" = (
-/obj/effect/floor_decal/industrial/warning{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dg" = (
+/obj/machinery/light_switch{
+ pixel_y = 23
+ },
/obj/structure/table/steel_reinforced,
-/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/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dh" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"rA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"rD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"rM" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"rO" = (
+/obj/machinery/shipsensors{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"rR" = (
+/obj/machinery/atmospherics/pipe/tank/phoron{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"rS" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"rV" = (
+/obj/machinery/door/airlock/glass_medical{
+ name = "Medical Bay";
+ req_access = list(103)
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor/multi_tile,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"sd" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/med)
+"sf" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/reagent_containers/glass/beaker/large,
+/obj/machinery/chemical_dispenser/ert,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"so" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/machinery/light/no_nightshift,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"sp" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/commander)
+"sq" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/dock_port)
+"sr" = (
+/obj/machinery/vending/food,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"sw" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"sz" = (
+/obj/structure/closet/wardrobe/ert,
+/obj/item/modular_computer/tablet/preset/custom_loadout/elite,
+/obj/item/weapon/storage/box/survival/comp{
+ starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi)
+ },
+/obj/machinery/light/no_nightshift,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"sA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/item/modular_computer/console/preset/medical{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"sB" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hallways_aft)
+"sC" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"sF" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/glasses/graviton,
+/obj/item/clothing/glasses/graviton,
+/obj/item/clothing/glasses/graviton,
+/obj/item/clothing/glasses/graviton,
+/obj/item/clothing/glasses/graviton,
+/obj/item/clothing/glasses/graviton,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"sH" = (
+/obj/machinery/computer/ship/sensors,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/railing/grey{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"sJ" = (
+/obj/structure/table/rack/steel,
+/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,
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"sS" = (
+/obj/machinery/shieldwallgen,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"sT" = (
+/obj/machinery/cryopod/ert_ship,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"sU" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/med)
+"sW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"sX" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"ta" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor/multi_tile,
+/obj/machinery/door/airlock/multi_tile/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"tb" = (
+/obj/machinery/telecomms/allinone/talon,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"tg" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"tp" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"tx" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"tA" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"tE" = (
+/obj/structure/sign/department/dock{
+ name = "ROBINEAU DOCK"
+ },
+/turf/simulated/wall/shull,
+/area/ship/ert/hangar)
+"tH" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/armoury_st)
+"tK" = (
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"tL" = (
+/obj/machinery/atmospherics/pipe/simple/visible/fuel{
+ dir = 9
+ },
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular/open{
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ship/ert/engine)
+"tV" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"tW" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/embedded_controller/radio/simple_docking_controller{
+ id_tag = "ert_boarding_shuttle";
+ pixel_x = -8;
+ pixel_y = 22
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"tX" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/mech_bay)
+"tZ" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/mech_bay)
+"ug" = (
+/obj/item/device/healthanalyzer/advanced,
+/obj/item/device/healthanalyzer/advanced,
+/obj/item/device/healthanalyzer/advanced,
+/obj/structure/table/rack/steel,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"uh" = (
+/obj/machinery/atmospherics/pipe/simple/visible/fuel{
+ dir = 10
+ },
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular/open{
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ship/ert/engine)
+"um" = (
+/obj/machinery/vending/engineering,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"un" = (
+/obj/machinery/door/airlock/glass_medical{
+ name = "Medical Bay";
+ req_access = list(103)
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"uq" = (
+/obj/structure/sign/department/medbay,
+/turf/simulated/wall/shull,
+/area/ship/ert/med_surg)
+"us" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"uu" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"ux" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"uE" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 8
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/sign/vacuum{
+ pixel_x = -32
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"uG" = (
+/obj/item/modular_computer/console/preset/sysadmin{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"uJ" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"uK" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/yellow{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"uS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"vb" = (
+/obj/machinery/sleeper{
+ dir = 4
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"vd" = (
+/obj/machinery/atmospherics/pipe/tank/phoron{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"vg" = (
/obj/machinery/atmospherics/pipe/simple/visible,
/obj/machinery/meter,
-/obj/machinery/shield_gen,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"di" = (
-/obj/machinery/shield_capacitor,
-/turf/simulated/shuttle/floor/darkred,
-/area/shuttle/specops/centcom)
-"dj" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"vi" = (
/obj/machinery/door/airlock/glass_engineering{
name = "Engineering";
req_access = list(103)
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dk" = (
-/obj/item/weapon/circuitboard/aiupload,
-/obj/item/weapon/circuitboard/borgupload,
-/obj/item/weapon/circuitboard/smes,
-/obj/item/weapon/aiModule/nanotrasen,
-/obj/item/weapon/aiModule/reset,
-/obj/item/weapon/aiModule/freeformcore,
-/obj/item/weapon/aiModule/protectStation,
-/obj/item/weapon/aiModule/quarantine,
-/obj/item/weapon/aiModule/paladin,
-/obj/item/weapon/aiModule/robocop,
-/obj/item/weapon/aiModule/safeguard,
-/obj/structure/table/steel_reinforced,
-/obj/item/weapon/smes_coil,
-/obj/item/weapon/smes_coil,
-/obj/item/device/t_scanner/advanced,
-/obj/item/device/t_scanner/advanced,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dl" = (
-/obj/machinery/light{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/door/blast/regular/open{
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"vt" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/machinery/light/no_nightshift,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"vv" = (
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"vK" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"vQ" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"vX" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/engineering)
+"wd" = (
+/obj/structure/sign/department/conference_room{
+ name = "OUTFITTING"
+ },
+/turf/simulated/wall/rshull,
+/area/ship/ert/bridge)
+"wi" = (
+/obj/structure/cable/yellow{
+ 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/multi_tile,
+/obj/machinery/door/airlock/multi_tile/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"wl" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/gun,
+/obj/item/weapon/gun/energy/gun,
+/obj/item/weapon/gun/energy/gun,
+/obj/item/weapon/gun/energy/gun,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/gun/energy/gun,
+/obj/item/weapon/gun/energy/gun,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"wn" = (
+/obj/structure/sign/department/telecoms{
+ name = "TELEPORTER"
+ },
+/turf/simulated/wall/rshull,
+/area/ship/ert/teleporter)
+"wo" = (
+/obj/machinery/light/no_nightshift,
+/obj/machinery/teleport/hub,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"wp" = (
+/obj/machinery/sleep_console,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"wr" = (
+/obj/machinery/shipsensors{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/atmos)
+"wt" = (
/obj/structure/table/steel_reinforced,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/obj/item/weapon/grenade/chem_grenade/metalfoam,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dm" = (
+/obj/item/weapon/storage/firstaid/bonemed,
+/obj/item/weapon/storage/firstaid/bonemed,
+/obj/item/weapon/storage/firstaid/clotting,
+/obj/item/weapon/storage/firstaid/clotting,
+/obj/item/weapon/storage/pill_bottle/sleevingcure/full,
+/obj/item/weapon/storage/pill_bottle/sleevingcure/full,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"wO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"wU" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/hallways)
+"wX" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"wZ" = (
+/obj/machinery/oxygen_pump/anesthetic,
+/turf/simulated/wall/shull,
+/area/ship/ert/med_surg)
+"xe" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"xg" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/anti_photons,
+/obj/item/weapon/storage/box/anti_photons,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xh" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/smokes,
+/obj/item/weapon/storage/box/smokes,
+/obj/machinery/light_switch{
+ pixel_y = 23
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xi" = (
+/obj/item/weapon/storage/box/teargas,
+/obj/item/weapon/storage/box/teargas,
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xr" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/empslite,
+/obj/item/weapon/storage/box/empslite,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xt" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/flashbangs,
+/obj/item/weapon/storage/box/flashbangs,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xv" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/ionrifle/pistol,
+/obj/item/weapon/gun/energy/ionrifle/pistol,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/gun/energy/ionrifle,
+/obj/item/weapon/gun/energy/ionrifle,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"xx" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hallways_aft)
+"xz" = (
+/obj/structure/closet/medical_wall{
+ pixel_x = 32
+ },
+/obj/item/weapon/storage/firstaid/clotting,
+/obj/item/weapon/storage/firstaid/bonemed,
+/obj/item/weapon/storage/firstaid/adv,
+/obj/item/weapon/storage/firstaid/adv,
+/obj/item/weapon/storage/firstaid/fire,
+/obj/item/weapon/storage/firstaid/fire,
+/obj/item/weapon/storage/firstaid/o2,
+/obj/item/weapon/storage/firstaid/o2,
+/obj/item/weapon/storage/firstaid/toxin,
+/obj/item/weapon/storage/firstaid/toxin,
+/obj/item/weapon/storage/firstaid/combat,
+/obj/item/weapon/storage/firstaid/combat,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"xA" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/item/clothing/shoes/magboots/adv,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"xC" = (
+/obj/machinery/portable_atmospherics/powered/scrubber,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"xG" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"xM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"xO" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"xU" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"xZ" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/launcher/grenade,
+/obj/item/weapon/gun/launcher/grenade,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"ya" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"yf" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/space_heater,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yg" = (
+/obj/machinery/door/firedoor/glass,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular/open{
+ dir = 2;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/shield_diffuser,
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"yi" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yj" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/space_heater,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yl" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"yo" = (
+/obj/machinery/door/airlock/external,
+/obj/effect/map_helper/airlock/door/ext_door,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"yp" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/firstaid/fire{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/weapon/storage/firstaid/fire{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/weapon/storage/firstaid/adv,
+/obj/item/weapon/storage/firstaid/adv,
+/obj/effect/floor_decal/corner/yellow{
+ dir = 8
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"yv" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/pipedispenser/orderable,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yx" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/pipedispenser/disposal/orderable,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yz" = (
+/turf/space,
+/area/space)
+"yB" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yC" = (
+/obj/machinery/vending/engivend,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"yD" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/structure/sign/vacuum{
+ pixel_y = 32
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"yG" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"yI" = (
+/obj/structure/sign/department/medbay,
+/turf/simulated/wall/shull,
+/area/ship/ert/med)
+"yJ" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/chemical_dispenser/biochemistry/full,
+/obj/item/weapon/reagent_containers/glass/beaker/large,
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"yR" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/effect/catwalk_plated,
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ship/ert/engineering)
+"yX" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/hangar)
+"yY" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"za" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hangar)
+"zb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"zc" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/eng_storage)
+"zg" = (
+/obj/item/modular_computer/console/preset/engineering{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"zh" = (
+/obj/machinery/button/remote/blast_door{
+ id = "VB_Rear_Blast";
+ name = "Emergency Blast Doors";
+ pixel_y = 24;
+ req_access = list(103)
+ },
+/obj/structure/table/steel_reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"zk" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"zo" = (
+/obj/item/modular_computer/console/preset/command{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"zr" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"zs" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/hallways)
+"zB" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/blue{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"zP" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"zT" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Af" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow,
+/obj/machinery/embedded_controller/radio/docking_port_multi{
+ child_names_txt = "Port Airlock Control;Starboard Airlock Control";
+ child_tags_txt = "von_braun_port;von_braun_star";
+ dir = 1;
+ id_tag = "von_braun_master";
+ pixel_y = -22
+ },
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Ah" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/structure/table/woodentable,
+/obj/item/weapon/implantpad,
+/obj/item/weapon/implanter,
+/obj/item/weapon/storage/box/admints,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Ai" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"An" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Ao" = (
+/obj/item/modular_computer/console/preset/medical{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Aq" = (
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/item/modular_computer/console/preset/security,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Ar" = (
/obj/structure/table/steel_reinforced,
/obj/fiftyspawner/phoron,
/obj/fiftyspawner/glass,
@@ -1637,161 +3609,1152 @@
/obj/fiftyspawner/rods,
/obj/fiftyspawner/rods,
/obj/fiftyspawner/rods,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dn" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"Av" = (
+/obj/item/modular_computer/console/preset/security,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Ay" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/blast/regular{
+ id = "NRV_DELTA"
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"AI" = (
+/obj/machinery/power/thermoregulator,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"AK" = (
+/obj/item/modular_computer/console/preset/research,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"AL" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/box/pillbottles,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"AS" = (
+/obj/item/modular_computer/console/preset/medical,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"AZ" = (
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Bb" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 8
+ },
+/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/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Bc" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Bf" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/light_switch{
+ pixel_y = 23
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Bj" = (
+/obj/machinery/shieldgen,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"Bo" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/barracks)
+"Bp" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/automatic/z8,
+/obj/item/weapon/gun/projectile/automatic/z8,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762,
+/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/m762/ap,
+/obj/item/ammo_magazine/m762/ap,
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Bq" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"Br" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"BE" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"BF" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"BI" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engineering)
+"BU" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"BW" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Ce" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"Ci" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/eng_storage)
+"Cn" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/machinery/vending/nifsoft_shop{
+ categories = 111;
+ desc = "For all your mindware and mindware accessories. Now paid for by Central!";
+ dir = 8;
+ emagged = 1;
+ name = "ERT NIFSoft Vendor"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways)
+"Cq" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"Cr" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"Cx" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/mech_bay)
+"CH" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/fans/hardlight,
+/obj/machinery/door/blast/regular{
+ id = "Von_Braun_Hangar";
+ name = "Hangar Blast Door"
+ },
+/turf/simulated/floor/reinforced,
+/area/ship/ert/hangar)
+"CI" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertportshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/structure/window/reinforced{
+ dir = 8
},
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"CL" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 8
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"CM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"CN" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"CP" = (
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1
+ },
+/obj/machinery/door/airlock/multi_tile/glass{
+ dir = 1;
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"CT" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"CZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Dd" = (
/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ dir = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"Dh" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/blast/regular/open{
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
+ },
/obj/structure/window/reinforced{
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"do" = (
-/obj/structure/table/glass,
-/obj/item/weapon/hand_tele,
-/obj/item/device/perfect_tele,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dp" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid,
-/obj/item/device/binoculars,
-/obj/item/device/survivalcapsule,
-/obj/item/device/survivalcapsule,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dq" = (
-/obj/structure/bed/chair/comfy/black,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dr" = (
-/obj/structure/table/rack,
-/obj/item/weapon/storage/backpack/ert/commander,
-/obj/item/clothing/head/helmet/ert/command,
-/obj/item/clothing/suit/armor/vest/ert/command,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ds" = (
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dt" = (
-/obj/structure/bed/chair/office/dark,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"du" = (
-/obj/machinery/shieldwallgen,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dv" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/rig_module/rescue_pharm,
-/obj/item/rig_module/sprinter,
-/obj/item/rig_module/sprinter,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dw" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/rig_module/mounted,
-/obj/item/rig_module/mounted/egun,
-/obj/item/rig_module/mounted/egun,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dx" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/rig_module/chem_dispenser/combat,
-/obj/item/rig_module/chem_dispenser/combat,
-/obj/item/rig_module/chem_dispenser/injector,
-/obj/item/rig_module/chem_dispenser/injector,
-/obj/item/rig_module/device/healthscanner,
-/obj/item/rig_module/device/healthscanner,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dy" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/rig_module/device/rcd,
-/obj/item/rig_module/device/rcd,
-/obj/item/rig_module/device/plasmacutter,
-/obj/item/rig_module/device/plasmacutter,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dz" = (
-/obj/structure/table/steel_reinforced,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas/half,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dA" = (
-/obj/machinery/atmospherics/pipe/simple/visible,
-/obj/machinery/light{
- dir = 8;
- icon_state = "tube1";
- pixel_y = 0
- },
-/obj/machinery/shield_gen/external,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dB" = (
-/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/shuttle/specops/centcom)
-"dC" = (
/obj/structure/window/reinforced{
dir = 4
},
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 8;
- icon_state = "shutter0";
- id = "ertportshutters";
- name = "Blast Shutters";
- opacity = 0
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Di" = (
+/obj/machinery/vending/medical{
+ req_access = null
},
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 8
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Dn" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
-/obj/structure/window/reinforced,
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"dD" = (
-/obj/machinery/door/airlock/command{
- name = "Captain's Quarters";
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"Do" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"Dt" = (
+/obj/structure/railing/grey,
+/obj/structure/railing/grey{
+ dir = 4
+ },
+/obj/structure/table/steel_reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Du" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/button/remote/blast_door{
+ dir = 1;
+ id = "ERT_Shuttle_Fore";
+ name = "ERT Deployment Access";
+ pixel_y = -25;
req_access = list(103)
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dE" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Dx" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/obj/structure/sign/warning/airlock{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"DJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"DK" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"DM" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/firstaid/surgery,
+/obj/item/weapon/storage/firstaid/surgery,
+/obj/item/weapon/surgical/bone_clamp,
+/obj/item/weapon/surgical/bone_clamp,
+/obj/item/weapon/surgical/scalpel/manager,
+/obj/item/weapon/surgical/scalpel/manager,
+/obj/item/weapon/surgical/circular_saw/manager,
+/obj/item/weapon/surgical/circular_saw/manager,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"DN" = (
+/obj/machinery/atmospherics/unary/engine{
+ dir = 4
+ },
+/turf/space,
+/area/ship/ert/engine)
+"DQ" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"DR" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 1;
+ name = "VB APC - North";
+ pixel_y = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"DS" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/hallways_aft)
+"Ec" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/weapon/storage/backpack/ert/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/item/clothing/suit/space/void/responseteam/security,
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"Ed" = (
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/yellow{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/sign/warning/engineering_access{
+ pixel_x = -32
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"Ee" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/white{
+ dir = 8
+ },
+/obj/machinery/portable_atmospherics/powered/pump/filled,
+/obj/machinery/light/no_nightshift,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"Eh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Eo" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"Eq" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Ez" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"EA" = (
+/obj/structure/table/woodentable,
+/obj/item/weapon/storage/box/trackimp,
+/obj/item/weapon/storage/box/cdeathalarm_kit,
+/obj/item/weapon/stamp/centcomm,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"EB" = (
+/obj/effect/floor_decal/corner/white,
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"EC" = (
+/obj/structure/bed/chair/comfy/black{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"ED" = (
+/obj/item/modular_computer/console/preset/ert{
+ dir = 4
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"EG" = (
+/obj/structure/bed/chair/bay/shuttle{
+ dir = 1
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"EP" = (
+/obj/structure/closet/crate/medical,
+/obj/item/weapon/storage/box/autoinjectors,
+/obj/item/weapon/storage/box/beakers,
+/obj/item/device/defib_kit/compact/combat/loaded,
+/obj/item/device/defib_kit/compact/combat/loaded,
+/obj/item/weapon/storage/box/bodybags,
+/obj/item/weapon/storage/box/bodybags{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/weapon/storage/box/gloves,
+/obj/item/weapon/storage/box/freezer,
+/obj/item/weapon/storage/box/masks,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Fd" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med)
+"Ff" = (
+/obj/machinery/light/no_nightshift,
+/obj/structure/sign/vacuum{
+ pixel_y = -32
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"Fg" = (
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"Fp" = (
+/obj/structure/sign/nosmoking_1,
+/turf/simulated/wall/rshull,
+/area/ship/ert/engineering)
+"Fq" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/box/frags,
+/obj/item/weapon/storage/box/frags,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Fz" = (
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"FD" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"FF" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_port,
+/turf/space,
+/area/space)
+"FJ" = (
+/obj/machinery/door/airlock/glass_command{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"FK" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/hallways)
+"FM" = (
+/obj/effect/floor_decal/corner/yellow{
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/blue{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"FN" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"FO" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_star)
+"FP" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"FQ" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"FR" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"FT" = (
+/obj/structure/closet/crate{
+ dir = 2
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"FW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"FX" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/item/weapon/paper/ert_armory_cells,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"FY" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"Ga" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/recharger,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"Gl" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/heavysniper,
+/obj/item/weapon/storage/box/sniperammo,
+/obj/item/weapon/storage/box/sniperammo,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Gr" = (
+/obj/machinery/power/emitter,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"Gv" = (
+/obj/structure/bed/chair/bay/chair/padded/blue,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"Gw" = (
+/obj/structure/closet/wardrobe/ert,
+/obj/item/modular_computer/tablet/preset/custom_loadout/elite,
+/obj/item/weapon/storage/box/survival/comp{
+ starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi)
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"GI" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"GJ" = (
+/obj/machinery/porta_turret/industrial/military,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/eng_storage)
+"GK" = (
+/obj/structure/closet/crate{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"GM" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/hallways)
+"GO" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"GR" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"GS" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/eng_storage)
+"GT" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ name = "VB APC - South";
+ pixel_y = -24
+ },
+/obj/structure/cable/yellow,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"GU" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 8
+ },
+/obj/structure/reagent_dispensers/foam,
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"GZ" = (
+/obj/structure/bed/chair/bay/shuttle,
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"Hf" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/engine)
+"Hp" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"Hq" = (
+/obj/machinery/door/firedoor/glass,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced,
+/obj/machinery/door/blast/regular/open{
+ dir = 4;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"Hu" = (
+/obj/machinery/door/firedoor,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced,
+/obj/machinery/door/blast/regular/open{
+ dir = 4;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"HB" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/gun/burst,
+/obj/item/weapon/gun/energy/gun/burst,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/gun/energy/lasershotgun,
+/obj/item/weapon/gun/energy/lasershotgun,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -12
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -4
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = 5
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"HC" = (
+/obj/structure/closet/crate/medical,
+/obj/item/weapon/storage/mre/menu11,
+/obj/item/weapon/storage/mre/menu11,
+/obj/item/weapon/storage/mre/menu11,
+/obj/item/weapon/storage/mre/menu11,
+/obj/item/stack/nanopaste/advanced,
+/obj/item/stack/nanopaste/advanced,
+/obj/item/stack/nanopaste/advanced,
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose,
+/obj/item/weapon/storage/pill_bottle/iron,
+/obj/item/weapon/storage/pill_bottle/iron,
+/obj/item/weapon/storage/pill_bottle/sleevingcure/full,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/extinguisher/mini,
+/obj/item/weapon/storage/box/syringes,
+/obj/item/weapon/storage/box/syringes{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 23
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"HE" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/dock_port)
+"HH" = (
+/obj/structure/bed/chair/bay/shuttle{
+ dir = 1
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -12
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = -4
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -23;
+ pixel_y = 5
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"HK" = (
+/obj/machinery/shield_diffuser,
+/obj/machinery/door/blast/regular/open{
+ dir = 2;
+ id = "ERT_Blast_Windows";
+ name = "Blast Shield"
+ },
+/obj/machinery/door/blast/regular{
+ id = "ERT_Shuttle_Fore"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"HO" = (
+/turf/simulated/wall/rshull,
+/area/shuttle/ert_ship_boat)
+"HR" = (
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"HZ" = (
+/obj/machinery/computer/ship/navigation{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/railing/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Ia" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"Ib" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/hallways_aft)
+"Id" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Ig" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Ii" = (
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Io" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"Ip" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/atmos)
+"Iv" = (
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Ix" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"IA" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/barracks)
+"IF" = (
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"IK" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"IL" = (
+/obj/structure/table/woodentable,
+/obj/item/device/aicard,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_y = -23
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"IZ" = (
/obj/structure/table/woodentable,
/obj/item/weapon/paper_bin{
pixel_x = -3;
@@ -1800,2273 +4763,22270 @@
/obj/item/weapon/pen{
pixel_y = 4
},
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dF" = (
-/obj/structure/table/woodentable,
-/obj/item/weapon/stamp/centcomm,
-/obj/item/weapon/storage/box/cdeathalarm_kit,
-/obj/item/weapon/storage/box/trackimp,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dG" = (
-/obj/structure/table/woodentable,
-/obj/item/weapon/pinpointer/advpinpointer,
-/obj/item/device/aicard,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dH" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 2;
- icon_state = "shutter0";
- id = "ertportshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"dI" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 2;
- icon_state = "shutter0";
- id = "ertportshutters";
- name = "Blast Shutters";
- opacity = 0
- },
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"dJ" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/machinery/door/blast/shutters{
- density = 0;
- dir = 2;
- icon_state = "shutter0";
- id = "ertportshutters";
- name = "Blast Shutters";
- opacity = 0
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
},
+/obj/item/toy/figure/ert,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Jb" = (
+/obj/machinery/door/firedoor/border_only,
/obj/structure/grille,
+/obj/structure/window/reinforced/full,
/obj/structure/window/reinforced{
dir = 4
},
-/obj/structure/window/reinforced,
-/turf/simulated/shuttle/plating,
-/area/shuttle/specops/centcom)
-"dK" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 5
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/machinery/meter,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dL" = (
-/obj/machinery/access_button{
- command = "cycle_interior";
- frequency = 1381;
- master_tag = "ert2_control";
- pixel_x = -22;
- pixel_y = -32;
- req_one_access = list(103)
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"Jc" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/storage/firstaid/toxin{
+ pixel_x = 2;
+ pixel_y = 2
},
-/obj/machinery/atmospherics/pipe/manifold/visible{
+/obj/item/weapon/storage/firstaid/toxin{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/weapon/storage/firstaid/o2,
+/obj/item/weapon/storage/firstaid/o2,
+/obj/machinery/light/no_nightshift{
dir = 1
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dM" = (
-/obj/machinery/atmospherics/pipe/simple/visible{
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Jd" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"Jf" = (
+/obj/effect/floor_decal/corner/yellow{
dir = 10
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dN" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/storage/firstaid/regular,
-/obj/item/weapon/storage/firstaid/regular,
-/obj/item/bodybag/cryobag,
-/obj/item/bodybag/cryobag,
-/obj/item/bodybag/cryobag,
-/obj/item/bodybag/cryobag,
-/obj/item/bodybag/cryobag,
-/obj/item/bodybag/cryobag,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dO" = (
-/obj/structure/table/rack/steel,
-/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_drop_pouches,
-/obj/item/clothing/accessory/storage/brown_drop_pouches,
-/obj/item/clothing/accessory/storage/brown_drop_pouches,
-/obj/item/clothing/accessory/storage/brown_drop_pouches,
-/obj/item/clothing/glasses/welding/superior,
-/obj/item/clothing/glasses/welding/superior,
-/obj/item/clothing/glasses/welding/superior,
-/obj/item/clothing/glasses/welding/superior,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dP" = (
-/obj/structure/table/rack/steel,
-/obj/item/weapon/rig/ert/engineer,
-/obj/item/weapon/rig/ert/engineer,
-/obj/item/weapon/rig/ert/engineer,
-/obj/item/weapon/rig/ert/engineer,
-/obj/item/weapon/storage/belt/utility/chief/full,
-/obj/item/weapon/storage/belt/utility/chief/full,
-/obj/item/weapon/storage/belt/utility/chief/full,
-/obj/item/weapon/storage/belt/utility/chief/full,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dQ" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/armor/vest/ert/engineer,
-/obj/item/clothing/suit/armor/vest/ert/engineer,
-/obj/item/clothing/suit/armor/vest/ert/engineer,
-/obj/item/clothing/suit/armor/vest/ert/engineer,
-/obj/item/clothing/head/helmet/ert/engineer,
-/obj/item/clothing/head/helmet/ert/engineer,
-/obj/item/clothing/head/helmet/ert/engineer,
-/obj/item/clothing/head/helmet/ert/engineer,
-/obj/item/weapon/storage/backpack/ert/engineer,
-/obj/item/weapon/storage/backpack/ert/engineer,
-/obj/item/weapon/storage/backpack/ert/engineer,
-/obj/item/weapon/storage/backpack/ert/engineer,
-/obj/item/taperoll/engineering,
-/obj/item/taperoll/engineering,
-/obj/item/taperoll/engineering,
-/obj/item/taperoll/engineering,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dR" = (
-/obj/structure/table/glass,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_y = -35
- },
-/obj/item/weapon/gun/projectile/deagle,
-/obj/item/ammo_magazine/m44,
-/obj/item/ammo_magazine/m44,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dS" = (
-/obj/structure/filingcabinet/filingcabinet,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dT" = (
-/obj/machinery/light,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dU" = (
-/obj/structure/bed/chair/comfy/black{
- dir = 1
- },
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dV" = (
-/obj/machinery/photocopier,
-/turf/simulated/floor/carpet,
-/area/shuttle/specops/centcom)
-"dW" = (
-/obj/machinery/atmospherics/pipe/simple/visible,
-/obj/machinery/door/airlock/glass_external{
- frequency = 1381;
- icon_state = "door_locked";
- id_tag = "ert2_shuttle_inner";
- locked = 1;
- name = "Ship Hatch"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dX" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1381;
- icon_state = "door_locked";
- id_tag = "ert2_shuttle_inner";
- locked = 1;
- name = "Ship Hatch"
- },
-/obj/machinery/atmospherics/pipe/simple/visible,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dY" = (
-/obj/machinery/vending/engineering,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"dZ" = (
-/obj/machinery/vending/tool,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ea" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 1;
- frequency = 1381;
- id_tag = "ert2_vent"
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- frequency = 1381;
- id_tag = "ert2_control";
- pixel_x = -24;
- req_access = list(103);
- tag_airpump = "ert2_vent";
- tag_chamber_sensor = "ert2_sensor";
- tag_exterior_door = "ert2_shuttle_outer";
- tag_interior_door = "ert2_shuttle_inner"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"eb" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 0
- },
-/obj/machinery/airlock_sensor{
- frequency = 1381;
- id_tag = "ert2_sensor";
- pixel_x = 25
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 1;
- frequency = 1381;
- id_tag = "ert2_vent"
- },
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ec" = (
-/obj/machinery/door/airlock/glass_external{
- frequency = 1381;
- icon_state = "door_locked";
- id_tag = "ert2_shuttle_outer";
- locked = 1;
- name = "Ship Hatch"
- },
-/obj/structure/fans/tiny,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ed" = (
-/obj/machinery/access_button{
- command = "cycle_exterior";
- frequency = 1381;
- master_tag = "ert2_control";
- pixel_x = 24;
- req_one_access = list(103)
- },
-/obj/machinery/door/airlock/glass_external{
- frequency = 1381;
- icon_state = "door_locked";
- id_tag = "ert2_shuttle_outer";
- locked = 1;
- name = "Ship Hatch"
- },
-/obj/structure/fans/tiny,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"ee" = (
-/obj/effect/floor_decal/industrial/danger/corner{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"ef" = (
-/obj/effect/floor_decal/industrial/danger{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Jg" = (
+/obj/machinery/light/no_nightshift{
dir = 1
},
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"eg" = (
-/obj/effect/floor_decal/industrial/danger/corner{
- icon_state = "dangercorner";
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med_surg)
+"Jk" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
dir = 8
},
-/turf/unsimulated/floor/steel,
-/area/centcom/specops)
-"mI" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/shoes/magboots,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"pn" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_y = 32
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Jl" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 1
},
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Js" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"Jw" = (
/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/space/void/responseteam/engineer,
-/obj/item/clothing/suit/space/void/responseteam/engineer,
-/obj/item/clothing/suit/space/void/responseteam/engineer,
-/obj/item/clothing/suit/space/void/responseteam/engineer,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"rB" = (
+/obj/item/weapon/storage/box/handcuffs,
+/obj/item/weapon/storage/box/handcuffs,
+/obj/effect/floor_decal/corner/red{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways)
+"Jx" = (
+/obj/item/device/perfect_tele_beacon/stationary{
+ tele_name = "NRB Robineau";
+ tele_network = "centcom"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"JB" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/dock_port)
+"JE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/corner,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"JG" = (
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"JJ" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/engineering{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"JM" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"JN" = (
+/obj/structure/bed/chair/bay/shuttle,
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"JW" = (
+/obj/machinery/light/no_nightshift,
+/obj/machinery/atmospherics/unary/engine{
+ dir = 4
+ },
+/turf/space,
+/area/ship/ert/engine)
+"JX" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"JY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"JZ" = (
/obj/structure/table/rack/steel,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/obj/item/device/suit_cooling_unit,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"zV" = (
+/obj/item/weapon/gun/energy/laser,
+/obj/item/weapon/gun/energy/laser,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/machinery/light/no_nightshift,
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Kb" = (
+/obj/structure/railing/grey{
+ dir = 4
+ },
+/obj/structure/railing/grey{
+ dir = 1
+ },
+/obj/item/weapon/paper/vonbraun_shields,
+/obj/structure/table/steel_reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Kf" = (
+/obj/machinery/computer/teleporter{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"Kk" = (
+/obj/effect/landmark/late_antag/ert,
+/obj/structure/table/bench/steel,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"Kq" = (
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Kr" = (
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/yellow{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"Ks" = (
+/obj/machinery/door/airlock/centcom{
+ name = "Commander";
+ req_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/commander)
+"Kt" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/dock_star)
+"Kw" = (
+/obj/structure/sign/department/eng,
+/turf/simulated/wall/rshull,
+/area/ship/ert/bridge)
+"KB" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"KG" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/storage/toolbox/mechanical,
+/obj/item/weapon/storage/toolbox/mechanical,
+/obj/item/weapon/storage/toolbox/electrical,
+/obj/item/weapon/storage/toolbox/electrical,
+/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/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"KI" = (
+/turf/simulated/wall/shull,
+/area/ship/ert/med)
+"KJ" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/railing/grey{
+ dir = 1
+ },
+/obj/structure/table/steel_reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"KM" = (
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"KO" = (
+/obj/machinery/vending/tool,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"KS" = (
+/obj/machinery/door/airlock/centcom{
+ name = "Reactor Access";
+ req_access = list(103)
+ },
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/door/blast/regular/open{
+ dir = 4;
+ id = "VB_Rear_Blast";
+ name = "Blast Shield"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"KT" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/item/weapon/grenade/chem_grenade/metalfoam,
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"KW" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/bridge)
+"La" = (
+/obj/item/modular_computer/console/preset/ert{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Lg" = (
+/obj/structure/table/rack/steel,
+/obj/item/taperoll/engineering,
+/obj/item/taperoll/engineering,
+/obj/item/taperoll/engineering,
+/obj/item/taperoll/engineering,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"Lh" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"Lk" = (
+/obj/structure/table/rack/steel,
+/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/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways)
+"Lq" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/gun/energy/gun/martin{
+ battery_lock = 0
+ },
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"LA" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/shotgun/pump/combat,
+/obj/item/weapon/gun/projectile/shotgun/pump/combat,
+/obj/item/weapon/storage/box/shotgunshells/large,
+/obj/item/weapon/storage/box/shotgunshells/large,
+/obj/item/weapon/storage/box/shotgunammo/large,
+/obj/item/weapon/storage/box/shotgunammo/large,
+/obj/item/weapon/storage/box/empshells/large,
+/obj/item/weapon/storage/box/flashshells/large,
+/obj/item/weapon/storage/box/beanbags/large,
+/obj/item/weapon/storage/box/beanbags/large,
+/obj/item/weapon/storage/box/stunshells/large,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"LB" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"LC" = (
+/obj/structure/table/rack/steel,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/item/weapon/gun/energy/laser,
+/obj/item/weapon/gun/energy/laser,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"LH" = (
+/obj/machinery/shield_gen/external,
+/obj/effect/floor_decal/corner/white,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"LJ" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"LR" = (
+/obj/machinery/door/airlock/external,
+/obj/effect/map_helper/airlock/door/ext_door,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_port)
+"LV" = (
+/obj/structure/table/steel_reinforced,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/machinery/button/remote/blast_door{
+ desc = "[OOC] DO NOT TOUCH THIS BUTTON WITHOUT THE EXPLICIT PERMISSION OF AN ADMINISTRATOR.";
+ dir = 1;
+ id = "NRV_DELTA";
+ name = "DELTA ACCESS CONTROL";
+ req_one_access = list(108)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"LZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"Mb" = (
+/obj/machinery/computer/operating{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"Md" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/taser,
+/obj/item/weapon/gun/energy/taser,
+/obj/item/weapon/gun/energy/taser,
+/obj/item/weapon/gun/energy/taser,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"Me" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/automatic/as24,
+/obj/item/weapon/gun/projectile/automatic/as24,
+/obj/item/weapon/storage/box/shotgunshells/large,
+/obj/item/weapon/storage/box/shotgunshells/large,
+/obj/item/weapon/storage/box/shotgunammo/large,
+/obj/item/weapon/storage/box/shotgunammo/large,
+/obj/item/weapon/storage/box/empshells/large,
+/obj/item/weapon/storage/box/flashshells/large,
+/obj/item/weapon/storage/box/beanbags/large,
+/obj/item/weapon/storage/box/beanbags/large,
+/obj/item/weapon/storage/box/stunshells/large,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Mm" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/teleporter)
+"Ms" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"Mt" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/energy/netgun,
+/obj/item/weapon/gun/energy/netgun,
+/obj/item/weapon/gun/energy/netgun,
+/obj/item/weapon/gun/energy/netgun,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_st)
+"Mv" = (
+/obj/item/device/perfect_tele_beacon/stationary{
+ tele_name = "NRV Von Braun Teleporter Room";
+ tele_network = "centcom"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"My" = (
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/green{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"MC" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12;
+ pixel_y = 8
+ },
+/obj/structure/medical_stand,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"MD" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"MK" = (
+/obj/structure/sign/nosmoking_1,
+/turf/simulated/wall/rshull,
+/area/ship/ert/engine)
+"ML" = (
+/obj/machinery/door/blast/regular/open{
+ id = "ERT_Shuttle_Rear";
+ name = "Boarding Hatch"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"MQ" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/eng_storage)
+"MT" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"MU" = (
+/obj/structure/window/reinforced,
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"MX" = (
+/obj/structure/table/steel_reinforced,
+/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,
+/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/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"MZ" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/med_surg)
+"Na" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_port)
+"Nb" = (
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Nd" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Nf" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"Ng" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/machinery/button/remote/blast_door{
+ id = "ERT_Shuttle_Fore";
+ name = "ERT Deployment Access";
+ pixel_y = 24;
+ req_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Nk" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"Np" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Nz" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/powered/scrubber,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"NH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/effect/catwalk_plated/dark,
+/turf/simulated/floor/plating,
+/area/ship/ert/engine)
+"NI" = (
+/obj/structure/table/rack,
+/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"NJ" = (
+/obj/machinery/optable,
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"NP" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/binary/pump/fuel/on,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"NR" = (
+/obj/machinery/light/no_nightshift,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"NU" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"NY" = (
/obj/machinery/door/airlock/glass_command{
req_one_access = list(103)
},
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"HG" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_y = -32
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"NZ" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"Oa" = (
+/obj/machinery/door/airlock/glass_engineering{
+ name = "Engineering";
+ req_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"Of" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Og" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/corner/yellow{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"Oh" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"Oi" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"Ok" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/embedded_controller/radio/simple_docking_controller{
+ id_tag = "ert_boarding_shuttle_dock";
+ pixel_y = 22
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"On" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"Oq" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"Ox" = (
+/obj/structure/cable/green{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Oy" = (
+/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/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/bridge)
+"OE" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/bridge)
+"OF" = (
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"OH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"OO" = (
/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/space/void/responseteam/medical,
-/obj/item/clothing/suit/space/void/responseteam/medical,
-/obj/item/clothing/suit/space/void/responseteam/medical,
-/obj/item/clothing/suit/space/void/responseteam/medical,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
-"TT" = (
+/obj/item/weapon/gun/energy/sniperrifle{
+ battery_lock = 0
+ },
+/obj/item/weapon/gun/energy/sniperrifle{
+ battery_lock = 0
+ },
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/item/weapon/cell/device/weapon/recharge,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"OR" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"OS" = (
+/obj/structure/bed/chair/bay/comfy/captain{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"OT" = (
+/obj/machinery/computer/ship/helm{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"OW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/power/shield_generator/charged,
+/obj/structure/cable/yellow{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/obj/structure/railing/grey{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"OX" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"OY" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_star,
+/turf/space,
+/area/space)
+"OZ" = (
+/obj/structure/table/standard,
+/obj/item/weapon/soap,
+/obj/item/weapon/soap,
+/obj/item/weapon/soap,
+/obj/item/weapon/soap,
+/obj/item/weapon/towel{
+ color = "#0000FF"
+ },
+/obj/item/weapon/towel{
+ color = "#0000FF"
+ },
+/obj/item/weapon/towel{
+ color = "#0000FF"
+ },
+/obj/item/weapon/towel{
+ color = "#0000FF"
+ },
+/obj/effect/floor_decal/corner/white,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Pc" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Pe" = (
+/obj/machinery/button/remote/blast_door{
+ dir = 1;
+ id = "ERT_Shuttle_Rear";
+ name = "ERT Shuttle Access";
+ pixel_y = -25;
+ req_access = list(103)
+ },
+/obj/machinery/door/blast/regular/open{
+ id = "ERT_Shuttle_Rear";
+ name = "Boarding Hatch"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Pl" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ dir = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Pn" = (
+/obj/item/modular_computer/console/preset/engineering{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Pq" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"PA" = (
+/obj/machinery/recharge_station,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"PC" = (
+/obj/machinery/door/blast/regular{
+ dir = 4;
+ id = "NRV_DELTA"
+ },
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"PD" = (
+/obj/structure/sign/department/medbay{
+ name = "MEDICAL OUTFITTING & SUPPLIES"
+ },
+/turf/simulated/wall/shull,
+/area/ship/ert/med)
+"PE" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/eng_storage)
+"PG" = (
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"PH" = (
+/obj/machinery/power/smes/buildable/point_of_interest,
+/obj/structure/cable/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"PS" = (
+/obj/machinery/shield_capacitor,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"PX" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"Qc" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 8;
+ name = "VB APC - West";
+ pixel_x = -24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"Qh" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Ql" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"Qz" = (
+/obj/item/weapon/circuitboard/aiupload,
+/obj/item/weapon/circuitboard/borgupload,
+/obj/item/weapon/circuitboard/smes,
+/obj/item/weapon/aiModule/nanotrasen,
+/obj/item/weapon/aiModule/reset,
+/obj/item/weapon/aiModule/freeformcore,
+/obj/item/weapon/aiModule/protectStation,
+/obj/item/weapon/aiModule/quarantine,
+/obj/item/weapon/aiModule/paladin,
+/obj/item/weapon/aiModule/robocop,
+/obj/item/weapon/aiModule/safeguard,
+/obj/structure/table/steel_reinforced,
+/obj/item/weapon/smes_coil,
+/obj/item/weapon/smes_coil,
+/obj/item/device/t_scanner/advanced,
+/obj/item/device/t_scanner/advanced,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ name = "VB APC - South";
+ pixel_y = -24
+ },
+/obj/structure/cable/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"QE" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced,
+/area/ship/ert/hangar)
+"QM" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"QP" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"QR" = (
+/obj/structure/bed/chair/bay/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"QS" = (
+/obj/structure/bed/chair/bay/shuttle{
+ dir = 4
+ },
+/obj/machinery/button/remote/blast_door{
+ dir = 8;
+ id = "ERT_Blast_Windows";
+ name = "Emergency Blast Shields";
+ pixel_x = 55;
+ req_one_access = list(101)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"QT" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"QX" = (
+/obj/structure/window/reinforced,
+/obj/machinery/computer/shuttle_control/explore/ert_ship_boat{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"QY" = (
+/obj/structure/table/rack,
+/obj/item/weapon/rig/ert,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"QZ" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"Rc" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/shuttle_landmark/shuttle_initializer/ert_ship_boat,
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Rd" = (
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engineering)
+"Rh" = (
+/obj/machinery/door/airlock/glass_external,
+/obj/effect/map_helper/airlock/door/int_door,
+/obj/machinery/door/firedoor/multi_tile,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"Rt" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"Rv" = (
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1
+ },
+/obj/machinery/door/airlock/glass_medical{
+ name = "Medical Bay";
+ req_access = list(103)
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"Rw" = (
+/obj/machinery/vending/security,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
+"Rz" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/blast/regular{
+ id = "NRV_DELTA"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"RB" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"RC" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"RO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"RQ" = (
+/obj/machinery/door/airlock/glass_engineering{
+ name = "Engineering";
+ req_access = list(103)
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/engineering)
+"RS" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/highsecurity{
+ name = "Teleporter Chamber";
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"RV" = (
+/obj/machinery/light_switch{
+ pixel_y = 23
+ },
+/obj/structure/table/woodentable,
+/obj/item/device/flashlight/lamp,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Sc" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Sj" = (
+/obj/machinery/light_switch{
+ dir = 4;
+ pixel_x = -23
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Sl" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/structure/railing/grey,
+/obj/structure/table/steel_reinforced,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Sp" = (
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/effect/catwalk_plated,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ship/ert/med)
+"Sr" = (
+/obj/machinery/light/no_nightshift,
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/barracks)
+"St" = (
/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/space/void/responseteam/security,
-/obj/item/clothing/suit/space/void/responseteam/security,
-/obj/item/clothing/suit/space/void/responseteam/security,
-/obj/item/clothing/suit/space/void/responseteam/security,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
+/obj/item/device/flash,
+/obj/item/device/flash,
+/obj/item/device/flash,
+/obj/item/device/flash,
+/obj/item/device/flash,
+/obj/item/device/flash,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways)
+"Sx" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/automatic/p90,
+/obj/item/weapon/gun/projectile/automatic/p90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/weapon/gun/projectile/automatic/p90,
+/obj/item/weapon/gun/projectile/automatic/p90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/item/ammo_magazine/m9mmp90,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Sy" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/gun/projectile/automatic/l6_saw,
+/obj/item/weapon/gun/projectile/automatic/l6_saw,
+/obj/item/ammo_magazine/m545saw,
+/obj/item/ammo_magazine/m545saw,
+/obj/item/ammo_magazine/m545saw,
+/obj/item/ammo_magazine/m545saw,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"Sz" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/dock_star)
+"SA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"SB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"SD" = (
+/obj/structure/table/rack,
+/obj/item/weapon/gun/projectile/deagle,
+/obj/item/ammo_magazine/m44,
+/obj/item/ammo_magazine/m44,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"SE" = (
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"SF" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_st)
+"SG" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"SI" = (
+/obj/machinery/portable_atmospherics/powered/scrubber,
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"SJ" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 5
+ },
+/turf/simulated/wall/rshull,
+/area/ship/ert/dock_star)
+"SV" = (
+/obj/structure/table/rack/steel,
+/obj/item/weapon/reagent_containers/hypospray,
+/obj/item/weapon/reagent_containers/hypospray,
+/obj/item/weapon/reagent_containers/hypospray,
+/obj/item/weapon/reagent_containers/hypospray,
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"SZ" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/shuttle/ert_ship_boat)
+"Tl" = (
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"Tx" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"TB" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"TF" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/ship/ert/med_surg)
+"TG" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"TI" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"TM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways_aft)
+"TR" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/armoury_dl)
+"TU" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med)
+"TZ" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"Ul" = (
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/item/modular_computer/console/preset/medical{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"Un" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/glass{
+ req_one_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"Ut" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/alarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/machinery/porta_turret/industrial/teleport_defense,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"UH" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"UJ" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/teleporter)
+"UT" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"UU" = (
+/obj/machinery/shieldwallgen{
+ anchored = 1;
+ name = "secured shield generator";
+ req_access = list(103);
+ state = 1
+ },
+/obj/structure/window/reinforced,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/cable/yellow,
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"UY" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/chemical_dispenser/full,
+/obj/item/weapon/reagent_containers/glass/beaker/large,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Vg" = (
+/obj/structure/table/steel_reinforced,
+/obj/machinery/recharger,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"Vm" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/light_switch{
+ pixel_y = 23
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Vn" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"VB" = (
+/obj/machinery/ntnet_relay,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"VC" = (
+/obj/machinery/power/port_gen/pacman/super/potato,
+/obj/structure/cable/green,
+/obj/machinery/light/no_nightshift,
+/obj/effect/decal/cleanable/greenglow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"VJ" = (
+/obj/machinery/door/firedoor/multi_tile{
+ dir = 1
+ },
+/obj/machinery/door/airlock/glass_medical{
+ name = "Medical Bay";
+ req_access = list(103)
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"VO" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"VP" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
+"VQ" = (
+/obj/structure/table/rack/steel,
+/obj/effect/floor_decal/corner/red,
+/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/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways)
+"Wa" = (
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_y = 32
+ },
+/obj/structure/bed/pod,
+/obj/item/weapon/bedsheet/blue,
+/obj/structure/curtain/open/bed,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"Wj" = (
+/obj/machinery/light/no_nightshift{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Wl" = (
+/obj/structure/table/steel_reinforced,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/item/stack/nanopaste,
+/obj/machinery/light/no_nightshift{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"Wq" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/blue,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"Wu" = (
+/obj/machinery/door/airlock/glass_security{
+ req_one_access = list(103)
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/blast/regular{
+ closed_layer = 4;
+ id = "NRV_DELTA";
+ layer = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/armoury_dl)
+"Wv" = (
+/obj/effect/shuttle_landmark/premade/ert_ship_near_star,
+/turf/space,
+/area/space)
+"WA" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"WC" = (
+/turf/simulated/floor/reinforced,
+/area/ship/ert/hangar)
+"WE" = (
+/obj/effect/floor_decal/corner/red{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"WF" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/med)
+"WH" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/barracks)
"WJ" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/space/void/responseteam/janitor,
-/obj/item/clothing/suit/space/void/responseteam/janitor,
-/obj/item/clothing/suit/space/void/responseteam/janitor,
-/obj/item/clothing/suit/space/void/responseteam/janitor,
-/obj/item/weapon/storage/belt/janitor,
-/obj/item/weapon/storage/belt/janitor,
-/obj/item/weapon/storage/belt/janitor,
-/obj/item/weapon/storage/belt/janitor,
-/turf/simulated/shuttle/floor/black,
-/area/shuttle/specops/centcom)
+/obj/structure/bed/chair/bay/shuttle{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/shuttle/ert_ship_boat)
+"WK" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/dock_star)
+"WO" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/fuel,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"WR" = (
+/obj/structure/filingcabinet/filingcabinet,
+/turf/simulated/floor/wood,
+/area/ship/ert/commander)
+"WS" = (
+/obj/machinery/computer/ship/engines{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"WV" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/barracks)
+"WX" = (
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/effect/catwalk_plated,
+/turf/simulated/floor/plating,
+/area/ship/ert/barracks)
+"Xg" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Xh" = (
+/obj/structure/bed/chair/bay/chair/padded/blue,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/hallways_aft)
+"Xo" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"Xu" = (
+/obj/structure/cable/yellow,
+/obj/machinery/power/smes/buildable/point_of_interest,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"Xx" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"XB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"XG" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/eng_storage)
+"XH" = (
+/obj/machinery/alarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"XM" = (
+/obj/effect/map_helper/airlock/sensor/chamber_sensor,
+/obj/machinery/airlock_sensor{
+ pixel_x = 24
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/dock_star)
+"XS" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/firealarm/alarms_hidden{
+ pixel_y = 26
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"XW" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/engineering)
+"XX" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Yd" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/armoury_dl)
+"Ye" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/barracks)
+"Yq" = (
+/obj/machinery/power/apc/hyper{
+ alarms_hidden = 1;
+ dir = 4;
+ name = "VB APC - East";
+ pixel_x = 24
+ },
+/obj/structure/cable/yellow{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Yr" = (
+/obj/structure/window/reinforced,
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Ys" = (
+/obj/structure/window/reinforced,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/cable/yellow,
+/obj/machinery/shieldwallgen{
+ anchored = 1;
+ name = "secured shield generator";
+ req_access = list(103);
+ state = 1
+ },
+/obj/effect/floor_decal/industrial/outline/blue,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/teleporter)
+"Yt" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/structure/bed/chair/bay/chair/padded/blue{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"Yx" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/bridge)
+"YN" = (
+/obj/structure/sign/warning/radioactive{
+ desc = "WARNING: VON BRAUN PTTOS EMIT RADIATION WHILST OPERATIONAL.";
+ name = "\improper RADIOACTIVE GENERATORS BEHIND THESE DOORS";
+ pixel_x = -16
+ },
+/turf/simulated/wall/shull,
+/area/ship/ert/engineering)
+"YP" = (
+/obj/machinery/atmospherics/pipe/manifold/visible/fuel{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engine)
+"YR" = (
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engineering)
+"YU" = (
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/light/no_nightshift{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"YW" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced,
+/area/shuttle/ert_ship_boat)
+"Zi" = (
+/obj/structure/cable/yellow{
+ 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/techmaint,
+/area/ship/ert/eng_storage)
+"Zo" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/barracks)
+"Zv" = (
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"Zx" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hangar)
+"ZC" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/bed/chair/bay/chair/padded/blue,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"ZF" = (
+/obj/item/roller_holder,
+/obj/item/roller/adv,
+/obj/item/roller/adv{
+ pixel_y = 6
+ },
+/obj/item/roller/adv{
+ pixel_y = 12
+ },
+/obj/machinery/light/no_nightshift,
+/obj/effect/floor_decal/industrial/outline,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/med)
+"ZI" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable/green{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/engineering)
+"ZL" = (
+/obj/machinery/power/pointdefense{
+ id_tag = "vonbraun_pd"
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/ship/ert/engine)
+"ZM" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/bridge)
+"ZP" = (
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"ZT" = (
+/turf/simulated/wall/rshull,
+/area/ship/ert/med)
+"ZU" = (
+/obj/machinery/light/no_nightshift,
+/obj/machinery/firealarm/alarms_hidden{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/machinery/power/port_gen/pacman/mrs,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/techfloor,
+/area/ship/ert/eng_storage)
+"ZW" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/med)
+"ZX" = (
+/obj/machinery/door/airlock/glass_command{
+ req_one_access = list(103)
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/bridge)
+"ZY" = (
+/obj/effect/floor_decal/corner/blue{
+ dir = 9
+ },
+/obj/structure/cable/yellow{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/techmaint,
+/area/ship/ert/hallways)
(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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+pf
"}
(2,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+yz
"}
(3,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(4,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(5,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(6,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ee
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-bU
-cn
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-ap
-bV
-co
-ap
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-bD
-bM
-bd
-cp
-cz
-cJ
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-bE
-bN
-bW
-bd
-cA
-cK
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-ap
-ap
-cq
-ap
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+cl
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-bO
-bX
-aH
-cB
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-ap
-aF
-aS
-ap
-aj
-ap
-ap
-am
-aH
-cC
-ap
-aj
-ap
-dn
-dC
-ap
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(15,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-am
-aG
-ay
-ap
-aj
-ap
-bP
-ap
-aH
-cD
-ap
-aj
-ap
-do
-aH
-am
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ax
-aH
-aT
-ap
-aj
-ap
-bQ
-bY
-aH
-cE
-ap
-aj
-ap
-dp
-aH
-ay
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ay
-aH
-ay
-ap
-aj
-ap
-bR
-ap
-cr
-cF
-ap
-aj
-ap
-dq
-aH
-dR
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ap
-aI
-ap
-ap
-ap
-ap
-am
-bZ
-aH
-WJ
-ap
-ap
-ap
-ap
-dD
-ap
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-az
-aJ
-az
-ap
-ap
-ap
-ap
-ap
-zV
-ap
-am
-ap
-da
-dr
-aH
-dS
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-az
-aJ
-aJ
-bh
-ap
-bF
-bS
-ca
-aH
-aH
-cL
-ap
-cX
-aH
-aH
-aH
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aq
-aA
-aJ
-aU
-aH
-bt
-aH
-aH
-bd
-bd
-aH
-aH
-bt
-aH
-ds
-dE
-dT
-dH
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ar
-az
-aJ
-aU
-aH
-aH
-aH
-bd
-bd
-bd
-bd
-aH
-aH
-aH
-dt
-dF
-dU
-dI
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-as
-az
-aJ
-aV
-bi
-ap
-TT
-bd
-cb
-cs
-bd
-rB
-ap
-db
-du
-dG
-dV
-dJ
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ap
-ap
-ap
-ap
-am
-bG
-bd
-cc
-ct
-bd
-mI
-am
-ap
-ap
-ap
-ap
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-ap
-ap
-aW
-bj
-bu
-bH
-bd
-cd
-cu
-bd
-bq
-cR
-dc
-dv
-ap
-ap
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(26,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-aq
-aX
-bk
-bv
-aH
-bd
-ce
-cv
-bd
-aH
-cS
-dd
-dw
-dH
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(27,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-ar
-aY
-bl
-bw
-aV
-bd
-cf
-cw
-bd
-cM
-cT
-de
-dx
-dI
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(28,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-aj
-as
-aZ
-bm
-bx
-aH
-bd
-cg
-cx
-bd
-aH
-cU
-df
-dy
-dJ
-aj
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aj
-ap
-ap
-ba
-bn
-by
-bI
-bd
-ch
-ch
-bd
-cN
-cV
-dg
-dz
-ap
-ap
-aj
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ap
-ap
-bb
-bo
-bz
-ap
-bd
-ci
-ci
-bd
-ap
-bb
-bo
-bz
-ap
-ap
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(31,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-am
-ap
-am
-aK
-bc
-bp
-bA
-ap
-bd
-cj
-cj
-bd
-ap
-cW
-dh
-dA
-dK
-am
-ap
-am
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(32,1,1) = {"
-ac
-af
-af
-af
-af
-ac
-af
-ak
-an
-at
-aB
-aL
-bd
-bd
-bd
-bJ
-bd
-bd
-bd
-bd
-bJ
-bd
-di
-di
-dL
-dW
-ea
-ec
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(33,1,1) = {"
-ac
-af
-af
-af
-ag
-ac
-ag
-ak
-ao
-au
-aB
-aM
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-bd
-dM
-dX
-eb
-ed
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(34,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-am
-ap
-am
-aN
-aH
-aH
-HG
-am
-bd
-bd
-bd
-bd
-am
-pn
-aH
-aH
-dN
-am
-ap
-am
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Nk
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-ap
-ap
-be
-be
-am
-ap
-bd
-ck
-bd
-cH
-ap
-am
-dj
-dj
-ap
-ap
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Do
+yz
+yz
+yz
+Hf
+yz
+yz
+yz
+Do
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(36,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-aq
-aO
-aH
-aH
-aH
-ap
-bK
-bd
-cl
-bd
-bd
-cO
-ap
-dk
-aH
-aH
-dO
-dH
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+lZ
+ZL
+kL
+yz
+yz
+yz
+Hf
+nX
+DN
+JW
+Hf
+nX
+DN
+JW
+Hf
+yz
+yz
+yz
+kL
+ZL
+lZ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-as
-aP
-aH
-aH
-bq
-ap
-bL
-bd
-bd
-bd
-bd
-cP
-ap
-dl
-aH
-aH
-dP
-dJ
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+lZ
+Hf
+Hf
+nX
+DN
+JW
+Hf
+uh
+et
+tL
+Hf
+uh
+et
+tL
+Hf
+nX
+DN
+JW
+Hf
+Hf
+lZ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-aj
-ap
-aQ
-aH
-aH
-br
-am
-ap
-bT
-cm
-cy
-cI
-cQ
-ap
-dm
-aH
-aH
-dQ
-ap
-aj
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Do
+Hf
+Hf
+uh
+et
+tL
+Hf
+GI
+rA
+GI
+MK
+GI
+rA
+GI
+Hf
+uh
+et
+tL
+Hf
+Hf
+Do
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
aj
-ap
-ap
-aC
-aH
-aH
-aH
-bB
-ap
-ap
-ap
-ap
-ap
-ap
-cY
-aH
-aH
-aH
-dY
-ap
-ap
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+Hf
+Hf
+GI
+rA
+GI
+MK
+QZ
+Id
+RB
+Np
+RB
+Id
+QZ
+MK
+GI
+rA
+GI
+Hf
+Hf
+Ia
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(40,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-ap
-ap
-aD
-aR
-bf
-bs
-bC
-ap
-av
-av
-av
-av
-ap
-cZ
-aH
-dB
-aR
-dZ
-ap
-ap
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+lZ
+Hf
+Hf
+ok
+rD
+ux
+zk
+CN
+Ig
+JY
+NH
+RC
+Tx
+WO
+CZ
+Of
+RO
+XH
+Hf
+Hf
+lZ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-ap
-ap
-ap
-ap
-ap
-am
-ap
-ap
-aw
-aE
-aE
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+lZ
+Hf
+Hf
+op
+uK
+uK
+uK
+rs
+YP
+YP
+NP
+RO
+QZ
+QZ
+QZ
+QZ
+SE
+cY
+Hf
+Hf
+lZ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
bg
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-ap
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+bg
+bg
+bg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(42,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-ap
-av
-av
-av
-av
-ap
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-ap
-av
-av
-av
-av
-ap
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ZL
+Hf
+Hf
+vd
+rR
+vd
+vd
+gR
+Ii
+Kq
+uS
+SE
+QZ
+QZ
+QZ
+QZ
+Hf
+Hf
+Hf
+Hf
+ZL
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(43,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aj
-ap
-aw
-aE
-aE
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bO
+kJ
+kJ
+kJ
+kJ
+kJ
+kJ
+kJ
+kJ
+kJ
+kJ
+vi
+Fp
+Dh
+Dh
+Dh
+Dh
+Fp
+XW
+XW
+XW
+XW
+YR
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
bg
-ap
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ap
-aw
-aE
-aE
bg
-ap
-aj
-ef
-aa
-aa
-aa
-aa
-aa
-aa
+bg
+bg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bg
+bg
+bg
+bg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(44,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ah
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-al
-eg
-aa
-aa
-aa
-aa
-aa
-aa
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bO
+kJ
+pV
+kP
+kP
+rS
+gA
+gA
+CT
+qR
+pV
+wO
+vX
+zh
+WS
+lB
+Ox
+KS
+JG
+VC
+XW
+XW
+YR
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(45,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bR
+kJ
+pV
+kS
+os
+os
+vg
+bp
+Dn
+gn
+pV
+NR
+vX
+ry
+Xg
+Sc
+Nb
+vX
+XW
+XW
+XW
+XW
+Rd
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(46,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bO
+kJ
+pV
+kT
+gA
+gA
+gA
+gA
+gA
+gN
+nx
+yR
+RQ
+TB
+OH
+nM
+qt
+YN
+XW
+XW
+XW
+XW
+YR
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(47,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+bW
+kJ
+pV
+kY
+oy
+oy
+vg
+bp
+DK
+Io
+pV
+NZ
+vX
+XS
+Xu
+ZI
+mt
+KS
+JG
+VC
+XW
+XW
+BI
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(48,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+wr
+kJ
+pV
+ls
+ls
+ls
+gA
+gA
+DQ
+Ip
+pV
+NZ
+vX
+hN
+PH
+ZI
+My
+vX
+XW
+XW
+XW
+XW
+cu
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(49,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+xx
+DS
+DS
+pV
+pV
+pV
+pV
+pV
+pV
+pV
+pV
+pV
+Oa
+vX
+vX
+vX
+vX
+vX
+vX
+vX
+vX
+vX
+XW
+XW
+cJ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
(50,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
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ib
+TG
+yl
+tK
+Oq
+ya
+ya
+ya
+ya
+SA
+FW
+Kr
+Og
+Ed
+TM
+TM
+TM
+TM
+TM
+ya
+kh
+Gv
+nY
+TG
+Ib
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(51,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ib
+TG
+pA
+HR
+vv
+DS
+DS
+DS
+DS
+DS
+DS
+DS
+Oh
+DS
+DS
+DS
+DS
+DS
+DS
+DS
+Ai
+Xh
+yG
+TG
+Ib
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(52,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+sB
+DS
+cS
+rM
+lu
+DS
+NI
+oa
+SD
+QY
+ds
+sp
+Oi
+Mm
+tb
+Wj
+UU
+iA
+jA
+DS
+lu
+rM
+cS
+DS
+sB
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(53,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ib
+DS
+DS
+cS
+cS
+oj
+DS
+Qh
+Iv
+Iv
+Iv
+Iv
+sp
+bt
+Mm
+sw
+Xx
+eF
+Ms
+Kf
+DS
+lO
+cS
+DS
+DS
+DS
+Ib
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(54,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+HE
+JB
+iB
+iB
+cS
+lu
+DS
+RV
+Iv
+zP
+Eh
+Ix
+sp
+Oi
+Mm
+Ut
+XB
+vQ
+Ms
+jI
+DS
+lu
+cS
+Sz
+Sz
+Sz
+nC
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(55,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ac
+JB
+cs
+iB
+iB
+Na
+JB
+Wa
+Iv
+zT
+Ez
+IK
+Ks
+Oy
+RS
+UJ
+PX
+TZ
+Mv
+wo
+Sz
+Un
+kW
+kW
+rt
+Sz
+FO
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(56,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ad
+JB
+cW
+dX
+hx
+lL
+JB
+WR
+Iv
+Ah
+EA
+IL
+sp
+xe
+Mm
+Vm
+XX
+lq
+jA
+jA
+Sz
+ck
+uJ
+JJ
+fk
+Sz
+hY
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(57,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+JB
+ak
+dd
+iB
+hH
+lR
+JB
+no
+Iv
+An
+EC
+IZ
+sp
+Oi
+wn
+VB
+Yq
+Ys
+Yr
+jA
+Sz
+uu
+na
+kW
+kX
+SJ
+Sz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(58,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+FF
+yz
+LR
+al
+dg
+dY
+hU
+lV
+JB
+JB
+ZM
+ZM
+ZM
+ZM
+ZM
+JX
+ZM
+ZM
+ZM
+ZM
+ZM
+Sz
+Sz
+Ql
+sC
+Rh
+bJ
+uE
+yo
+yz
+OY
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(59,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ae
+am
+dn
+ee
+ik
+lX
+oV
+sq
+KW
+KW
+KW
+YU
+Wq
+OE
+zB
+YU
+KW
+KW
+KW
+Kt
+tp
+WK
+tA
+ch
+pN
+XM
+lx
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(60,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+JB
+JB
+iB
+JB
+Dx
+iB
+iB
+iB
+ZM
+ZM
+ZM
+ZM
+Kw
+NY
+ZM
+ZM
+ZM
+ZM
+ZM
+kW
+kW
+kW
+ix
+kW
+kW
+Sz
+Sz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(61,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+kO
+Zo
+Bo
+ia
+ip
+mb
+mb
+Bo
+ZM
+ZM
+ED
+Ao
+cP
+Oi
+Sj
+zg
+ED
+ZM
+ZM
+mJ
+Ar
+hP
+Br
+PS
+zc
+XG
+GJ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(62,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Sr
+Zo
+Bo
+ia
+ip
+WH
+Kk
+lv
+ZM
+Aq
+Fg
+FD
+FD
+OF
+ha
+ha
+Yt
+Ul
+ZM
+gk
+Zv
+Zv
+Br
+PS
+zc
+XG
+qF
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(63,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ab
+Zo
+Bo
+ef
+iO
+mj
+Kk
+sz
+ZM
+Av
+us
+FD
+sH
+OS
+HZ
+FD
+Yx
+zo
+ZM
+sS
+Zv
+xC
+sW
+PS
+zc
+XG
+aV
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(64,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Zo
+Bo
+eg
+iR
+mq
+Kk
+lv
+ZM
+AK
+Fz
+FD
+KJ
+OT
+Sl
+FD
+ZC
+uG
+ZM
+Bj
+Zv
+SI
+oO
+SG
+Qz
+XG
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(65,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Zo
+Gw
+Kk
+Jd
+WH
+Kk
+lv
+ZM
+AS
+us
+FD
+Kb
+OW
+Dt
+FD
+Yx
+Pn
+ZM
+um
+Zv
+oC
+Eo
+Zv
+KT
+KB
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(66,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+lv
+Kk
+Jd
+WH
+Kk
+sz
+ZM
+AZ
+FD
+FD
+KM
+OX
+KM
+FD
+ZP
+iy
+ZM
+KO
+Zv
+oC
+Eo
+Zv
+KG
+KB
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(67,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+lv
+Kk
+Jd
+WH
+Kk
+lv
+ZM
+hs
+FD
+La
+La
+sA
+La
+La
+Rt
+Af
+ZM
+yC
+Zv
+Gr
+eI
+Zv
+Lg
+KB
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(68,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+lv
+Kk
+Jd
+mr
+WH
+sF
+wd
+ZM
+FJ
+Jk
+Jk
+Pc
+Jk
+Jk
+ZX
+ZM
+eH
+cV
+Zv
+Gr
+eI
+Zv
+AI
+KB
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(69,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+lv
+Kk
+WX
+mC
+IA
+IA
+wi
+Bb
+FK
+Jl
+GM
+zs
+GM
+VO
+ZY
+FM
+wi
+Zi
+Zi
+Zi
+PE
+Zv
+AI
+XG
+Ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(70,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ab
+Zo
+Gw
+Kk
+Jd
+mF
+ip
+ip
+BW
+Bc
+BW
+Js
+BW
+BW
+BW
+VP
+sX
+Jf
+BW
+Br
+Br
+Br
+eI
+Zv
+ZU
+XG
+aV
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(71,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+pS
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Sr
+Zo
+Bo
+sr
+Jd
+WV
+oW
+sJ
+wU
+Bf
+FN
+Jw
+Lk
+Cn
+St
+VQ
+OR
+vt
+wU
+cv
+LH
+GS
+MQ
+cC
+aD
+XG
+qF
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Wv
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(72,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+kO
+Zo
+Bo
+Bo
+Jd
+mI
+Bo
+tH
+tH
+Bq
+FQ
+Jb
+Jb
+Yd
+TR
+TR
+Ay
+Rz
+Yd
+ZT
+yI
+QT
+pz
+KI
+KI
+ZT
+eD
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(73,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Sr
+Zo
+Zo
+xA
+xA
+Jd
+mF
+Ec
+tH
+gx
+SF
+FR
+FR
+kf
+Pl
+Sx
+On
+FY
+UH
+HB
+ZT
+yp
+pm
+sd
+wt
+pq
+ZT
+ZT
+Fd
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(74,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ab
+Zo
+an
+WH
+WH
+Jd
+mF
+so
+tH
+LC
+SF
+FR
+FR
+wl
+Pl
+xZ
+On
+FY
+UH
+nb
+ZT
+Jc
+QT
+sU
+Pq
+Pq
+ZF
+ZT
+WF
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(75,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+ao
+WH
+Rw
+Jd
+mF
+MX
+tH
+xg
+SF
+FT
+FR
+Lq
+Pl
+pI
+On
+es
+UH
+OO
+ZT
+Di
+QT
+sU
+IF
+Pq
+AL
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(76,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+ap
+WH
+eP
+kM
+mR
+oX
+tH
+xh
+BE
+FX
+FR
+FR
+PC
+On
+On
+LV
+NU
+Bp
+ZT
+Di
+ZW
+lz
+ug
+Pq
+EP
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(77,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+lm
+WH
+eX
+iX
+mT
+oX
+tH
+xi
+BF
+Ga
+FR
+FR
+PC
+On
+On
+Vg
+TI
+Gl
+ZT
+DR
+aI
+ql
+iC
+Pq
+UY
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(78,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+yY
+br
+WH
+ff
+ip
+mV
+pa
+tH
+xr
+BU
+GK
+FR
+LA
+Pl
+Me
+On
+kz
+On
+pW
+ZT
+SV
+DJ
+QT
+jn
+Pq
+sf
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(79,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ab
+Zo
+bI
+WH
+WH
+ip
+mV
+pd
+tH
+xt
+BU
+FR
+FR
+Md
+Pl
+Sy
+On
+FY
+On
+JZ
+ZT
+Wl
+DJ
+QT
+Pq
+Pq
+yJ
+ZT
+WF
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(80,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Sr
+Zo
+Zo
+do
+do
+ip
+mV
+pn
+tH
+xv
+Ce
+FR
+FR
+Mt
+Pl
+gX
+On
+QM
+my
+Fq
+ZT
+DM
+DJ
+QT
+xz
+HC
+ZT
+ZT
+Fd
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(81,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+kO
+Zo
+Bo
+Bo
+ip
+mZ
+Bo
+tH
+tH
+CI
+GO
+GO
+CI
+Yd
+TR
+Wu
+UT
+TR
+Yd
+ZT
+PD
+un
+VJ
+KI
+KI
+ZT
+eD
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(82,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Dd
+dp
+fj
+ip
+mV
+pt
+oi
+xG
+CL
+GR
+GR
+MD
+Qc
+GU
+WE
+hV
+WA
+EB
+oi
+qA
+oQ
+dx
+Nd
+PA
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(83,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Dd
+dr
+fj
+jz
+nc
+pv
+ta
+xM
+CM
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Tl
+Vn
+kG
+rV
+Hp
+Sp
+wX
+Pq
+Pq
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(84,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Dd
+dB
+fj
+jD
+JM
+ip
+Tl
+JE
+Nf
+Nf
+Nf
+Nf
+Nf
+Nf
+Nf
+Nf
+Nf
+yi
+dA
+QT
+Lh
+Xo
+Pq
+Pq
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(85,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Ye
+Dd
+dV
+fj
+ip
+mV
+pG
+tE
+yf
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+Ee
+tE
+OZ
+Cq
+tg
+km
+PA
+kx
+TU
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(86,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+af
+bM
+Cx
+Cx
+jK
+nn
+pK
+Cx
+yj
+WC
+WC
+YW
+WC
+WC
+WC
+YW
+WC
+WC
+dk
+uq
+ga
+po
+Rv
+dq
+dq
+MZ
+Jg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(87,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ag
+bM
+Cx
+fx
+jQ
+np
+pM
+Cx
+yj
+WC
+YW
+HO
+kt
+ML
+Pe
+HO
+YW
+WC
+dk
+dq
+gf
+TF
+ij
+hv
+dq
+MZ
+aC
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(88,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+Cx
+fE
+jQ
+np
+pY
+tX
+yv
+WC
+HO
+HO
+tW
+QP
+tV
+HO
+HO
+WC
+Nz
+nl
+pU
+TF
+ij
+wp
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(89,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+Cx
+fP
+jU
+nt
+qa
+tX
+yx
+WC
+Hu
+mH
+MT
+QR
+MT
+HH
+dT
+WC
+Nz
+nl
+ij
+LB
+xU
+GT
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(90,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ai
+bM
+Cx
+fU
+jY
+nv
+qd
+tX
+xO
+WC
+Hq
+JN
+MT
+QS
+MT
+WJ
+og
+WC
+Nz
+nl
+mh
+LZ
+LJ
+hS
+dq
+MZ
+Cr
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(91,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+Cx
+fZ
+jQ
+np
+qo
+tX
+xO
+WC
+Hu
+JN
+MU
+QX
+SZ
+WJ
+dT
+WC
+Zx
+nl
+pb
+nq
+ij
+MC
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(92,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+bM
+qy
+ki
+nz
+qy
+bM
+xO
+WC
+Hq
+JN
+MU
+Eq
+SZ
+WJ
+og
+WC
+Zx
+nl
+dq
+zb
+PG
+dq
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(93,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+af
+bM
+bM
+gh
+jQ
+np
+qz
+bM
+Ok
+WC
+Hu
+GZ
+MT
+Jx
+MT
+EG
+dT
+WC
+Zx
+nl
+aQ
+nq
+ij
+aQ
+dq
+MZ
+Jg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(94,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+bM
+gw
+jQ
+np
+qD
+bM
+xO
+WC
+HO
+HO
+Ng
+Rc
+Du
+HO
+HO
+WC
+Zx
+nl
+cO
+nq
+ij
+Mb
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(95,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+bM
+gy
+jQ
+np
+qE
+bM
+xO
+WC
+ax
+HO
+yg
+HK
+yg
+HO
+ax
+WC
+Zx
+nl
+NJ
+nq
+ij
+NJ
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(96,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ai
+bM
+bM
+gF
+kl
+nB
+qQ
+bM
+xO
+WC
+WC
+HO
+WC
+WC
+WC
+HO
+WC
+WC
+Zx
+dq
+wZ
+gZ
+CP
+wZ
+dq
+MZ
+Cr
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(97,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+bM
+gW
+jY
+nP
+qS
+bM
+xO
+WC
+WC
+HO
+WC
+WC
+WC
+HO
+WC
+WC
+Zx
+dq
+ij
+nq
+ij
+ij
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(98,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ah
+bM
+bM
+hj
+jQ
+jQ
+qT
+bM
+yB
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+WC
+zr
+dq
+mN
+SB
+tx
+mN
+dq
+MZ
+ci
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(99,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ag
+bM
+bM
+hk
+jQ
+jQ
+rp
+bM
+yD
+QE
+QE
+QE
+QE
+QE
+QE
+QE
+QE
+QE
+Ff
+dq
+vb
+iW
+LJ
+vb
+dq
+MZ
+aC
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(100,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+af
+bM
+bM
+bM
+kn
+nR
+rr
+bM
+yX
+CH
+CH
+CH
+CH
+CH
+CH
+CH
+CH
+CH
+yX
+MZ
+dq
+jv
+ij
+dq
+MZ
+MZ
+Jg
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(101,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ai
+bM
+bM
+bM
+bM
+bM
+bM
+ib
+za
+za
+za
+za
+za
+za
+za
+za
+za
+hW
+MZ
+MZ
+sT
+sT
+MZ
+MZ
+Cr
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(102,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+dW
+bM
+bM
+bM
+bM
+ai
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+Cr
+MZ
+MZ
+MZ
+MZ
+vK
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(103,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ag
+bM
+bM
+bM
+ah
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ci
+MZ
+MZ
+MZ
+aC
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(104,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ai
+bM
+bM
+tZ
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+FP
+MZ
+MZ
+Cr
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(105,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+rO
+bM
+ah
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ci
+MZ
+az
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(106,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+ag
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+aC
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(107,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(108,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(109,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(110,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(111,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(112,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(113,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(114,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(115,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(116,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(117,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(118,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(119,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(120,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(121,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(122,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(123,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(124,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(125,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(126,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(127,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(128,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(129,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+oN
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(130,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(131,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(132,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(133,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(134,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(135,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(136,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(137,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(138,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(139,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+"}
+(140,1,1) = {"
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
"}
diff --git a/maps/submaps/surface_submaps/mountains/Cliff1.dmm b/maps/submaps/surface_submaps/mountains/Cliff1.dmm
index 2b6f57b9f1..1897f0ab17 100644
--- a/maps/submaps/surface_submaps/mountains/Cliff1.dmm
+++ b/maps/submaps/surface_submaps/mountains/Cliff1.dmm
@@ -1,23 +1,25 @@
"a" = (/turf/template_noop,/area/template_noop)
"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"c" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"d" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"e" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"h" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"i" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"j" = (/obj/random/humanoidremains{spawn_nothing_percentage = 70},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
+"c" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"d" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"e" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"h" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"i" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"j" = (/obj/random/humanoidremains{spawn_nothing_percentage = 70},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
+"k" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
abbbbabbbbbbbaabbbbbbbbaaabbaa
-aabcbbbdbcbbbbbbdbbcdbbbbcbbaa
-aabefcbbbbbdbbcbbbbbbcghhhibaa
-aabcehhfbbbbbbbbbcghhhibbbcbaa
-aaajbbbehfbcbghhhhibbbcjbbbaaa
-aaaaabbcbehhhibbbbbbcbbbbaaaaa
-aaaaaaacbbbjbbcbbcbbbaaaaaaaaa
+aakckkbdbcbbbbbbdbbcdbbkkckkaa
+aakefckkkbbdbbcbbbkkkcghhhikaa
+aakcehhfkkkkkkkkkcghhhikkkckaa
+aaajkkkehfkckghhhhikkkcjbbbaaa
+aaaaabkckehhhikkkkkkcbbbbaaaaa
+aaaaaaackkkjkkcbbcbbbaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/maps/submaps/surface_submaps/mountains/Geyser1.dmm b/maps/submaps/surface_submaps/mountains/Geyser1.dmm
index 32a4bb18d0..c61b3d11a1 100644
--- a/maps/submaps/surface_submaps/mountains/Geyser1.dmm
+++ b/maps/submaps/surface_submaps/mountains/Geyser1.dmm
@@ -1,10 +1,10 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"c" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"d" = (/obj/random/outcrop,/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"e" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"f" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/turf/simulated/floor/water/deep{outdoors = 0},/area/template_noop)
-"g" = (/obj/random/turf/lava,/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
+"b" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1)
+"c" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1)
+"d" = (/obj/random/outcrop,/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1)
+"e" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1)
+"f" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/turf/simulated/floor/water/deep{outdoors = 0},/area/submap/geyser_1)
+"g" = (/obj/random/turf/lava,/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1)
(1,1,1) = {"
accbdca
diff --git a/maps/submaps/surface_submaps/mountains/Geyser2.dmm b/maps/submaps/surface_submaps/mountains/Geyser2.dmm
index ddc99e4eb4..339736597f 100644
--- a/maps/submaps/surface_submaps/mountains/Geyser2.dmm
+++ b/maps/submaps/surface_submaps/mountains/Geyser2.dmm
@@ -1,16 +1,16 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"c" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"d" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"e" = (/obj/structure/fence{icon_state = "straight"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"f" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"g" = (/obj/structure/fence/cut/large,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"h" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"i" = (/obj/structure/fence,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"j" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"k" = (/obj/structure/fence/door/locked,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"l" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"m" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/random/humanoidremains,/obj/random/medical/lite,/turf/simulated/floor/water/deep{outdoors = 0},/area/template_noop)
+"b" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"c" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"d" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"e" = (/obj/structure/fence{icon_state = "straight"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"f" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"g" = (/obj/structure/fence/cut/large,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"h" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"i" = (/obj/structure/fence,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"j" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"k" = (/obj/structure/fence/door/locked,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"l" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2)
+"m" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/random/humanoidremains,/obj/random/medical/lite,/turf/simulated/floor/water/deep{outdoors = 0},/area/submap/geyser_2)
(1,1,1) = {"
abbcbba
diff --git a/maps/submaps/surface_submaps/mountains/Geyser3.dmm b/maps/submaps/surface_submaps/mountains/Geyser3.dmm
index 00abb7bf98..70047b220a 100644
--- a/maps/submaps/surface_submaps/mountains/Geyser3.dmm
+++ b/maps/submaps/surface_submaps/mountains/Geyser3.dmm
@@ -1,21 +1,21 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"c" = (/obj/structure/cliff/automatic,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"d" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"f" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"g" = (/turf/simulated/floor/lava,/area/template_noop)
-"h" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"i" = (/obj/structure/cliff/automatic/corner,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"j" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"k" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"l" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/fire{interval_upper_bound = 1200},/turf/simulated/floor/lava,/area/template_noop)
-"m" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"n" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"o" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
-"r" = (/obj/random/multiple/minevault,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop)
+"b" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"c" = (/obj/structure/cliff/automatic,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"d" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"f" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"g" = (/turf/simulated/floor/lava,/area/submap/geyser_3)
+"h" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"i" = (/obj/structure/cliff/automatic/corner,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"j" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"k" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"l" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/fire{interval_upper_bound = 1200},/turf/simulated/floor/lava,/area/submap/geyser_3)
+"m" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"n" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"o" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
+"r" = (/obj/random/multiple/minevault,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3)
(1,1,1) = {"
abcdcea
diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm
index 34f151a17f..83447b714c 100644
--- a/maps/submaps/surface_submaps/mountains/mountains.dm
+++ b/maps/submaps/surface_submaps/mountains/mountains.dm
@@ -25,6 +25,7 @@
#include "vault3.dmm"
#include "vault4.dmm"
#include "vault5.dmm"
+#include "vault6.dmm"
#include "IceCave1A.dmm"
#include "IceCave1B.dmm"
#include "IceCave1C.dmm"
diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm
index 04c8568513..d39e38823b 100644
--- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm
+++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm
@@ -96,6 +96,10 @@
name = "POI - Mine Vault"
ambience = AMBIENCE_FOREBODING
+/area/submap/cave/vault6
+ name = "POI - Mine Vault"
+ ambience = AMBIENCE_FOREBODING
+
/area/submap/cave/IceCave1A
name = "POI - Ice Cave 1A"
ambience = AMBIENCE_SPACE
@@ -123,6 +127,22 @@
name = "POI - Crashed Containment Shuttle"
ambience = AMBIENCE_HIGHSEC
+/area/submap/geyser_1
+ name = "POI - Ore-Rich Geyser"
+ ambience = AMBIENCE_RUINS
+
+/area/submap/geyser_2
+ name = "POI - Fenced Geyser"
+ ambience = AMBIENCE_RUINS
+
+/area/submap/geyser_3
+ name = "POI - Magmatic Geyser"
+ ambience = AMBIENCE_RUINS
+
+/area/submap/ore_cliff
+ name = "POI - Ore-Topped Cliff"
+ ambience = AMBIENCE_RUINS
+
/area/submap/deadspy
name = "POI - Dead Spy"
ambience = AMBIENCE_FOREBODING
diff --git a/maps/submaps/surface_submaps/mountains/vault6.dmm b/maps/submaps/surface_submaps/mountains/vault6.dmm
index b39128369e..c1ae439301 100644
--- a/maps/submaps/surface_submaps/mountains/vault6.dmm
+++ b/maps/submaps/surface_submaps/mountains/vault6.dmm
@@ -1,22 +1,22 @@
"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"c" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"d" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"f" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"h" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"i" = (/mob/living/simple_mob/humanoid/merc/ranged/grenadier,/turf/simulated/floor/cult,/area/template_noop)
-"j" = (/turf/simulated/floor/cult,/area/template_noop)
-"k" = (/obj/random/tool/power,/obj/random/tech_supply,/turf/simulated/floor/cult,/area/template_noop)
-"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"m" = (/obj/structure/bonfire/permanent/sifwood,/obj/structure/grille/rustic,/turf/simulated/floor/cult,/area/template_noop)
-"n" = (/obj/random/multiple/minevault,/turf/simulated/floor/cult,/area/template_noop)
-"o" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"r" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
-"s" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop)
+"b" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"c" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"d" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"f" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"h" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"i" = (/mob/living/simple_mob/humanoid/merc/ranged/grenadier,/turf/simulated/floor/cult,/area/submap/cave/vault6)
+"j" = (/turf/simulated/floor/cult,/area/submap/cave/vault6)
+"k" = (/obj/random/tool/power,/obj/random/tech_supply,/turf/simulated/floor/cult,/area/submap/cave/vault6)
+"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"m" = (/obj/structure/bonfire/permanent/sifwood,/obj/structure/grille/rustic,/turf/simulated/floor/cult,/area/submap/cave/vault6)
+"n" = (/obj/random/multiple/minevault,/turf/simulated/floor/cult,/area/submap/cave/vault6)
+"o" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"r" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
+"s" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6)
(1,1,1) = {"
aaaaaaaaa
diff --git a/maps/tether/submaps/tether_plains.dmm b/maps/tether/submaps/tether_plains.dmm
index 784fcc9e91..40614ab1eb 100644
--- a/maps/tether/submaps/tether_plains.dmm
+++ b/maps/tether/submaps/tether_plains.dmm
@@ -37,7 +37,6 @@
dir = 1;
id = "wilderness";
name = "Anti-Fauna shutters";
- pixel_x = 0;
pixel_y = -25
},
/turf/simulated/floor/tiled/steel_dirty/virgo3b,
@@ -45,8 +44,7 @@
"aj" = (
/obj/effect/floor_decal/rust,
/obj/machinery/light/small{
- dir = 8;
- pixel_x = 0
+ dir = 8
},
/turf/simulated/floor/tiled/steel_dirty/virgo3b,
/area/tether/outpost/exploration_shed)
@@ -99,7 +97,6 @@
/area/tether/outpost/exploration_shed)
"aq" = (
/obj/machinery/button/remote/blast_door{
- dir = 2;
id = "wilderness";
name = "Anti-Fauna shutters";
pixel_x = -1;
@@ -123,6 +120,9 @@
"bF" = (
/turf/simulated/mineral/virgo3b,
/area/mine/unexplored)
+"Al" = (
+/turf/simulated/mineral/virgo3b,
+/area/mine/explored)
"BE" = (
/mob/living/simple_mob/animal/space/goose/virgo3b,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
@@ -131,6 +131,9 @@
/mob/living/simple_mob/animal/passive/gaslamp,
/turf/simulated/floor/outdoors/grass/sif/virgo3b,
/area/tether/outpost/exploration_plains)
+"ID" = (
+/turf/simulated/mineral/virgo3b,
+/area/tether/outpost/exploration_shed)
(1,1,1) = {"
as
@@ -418,7 +421,7 @@ ac
"}
(3,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -560,7 +563,7 @@ ac
"}
(4,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -702,7 +705,7 @@ ac
"}
(5,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -844,7 +847,7 @@ ac
"}
(6,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -986,7 +989,7 @@ ac
"}
(7,1,1) = {"
as
-bF
+Al
ad
ad
bF
@@ -1128,7 +1131,7 @@ ac
"}
(8,1,1) = {"
as
-ad
+Al
ad
ad
ad
@@ -1270,7 +1273,7 @@ ac
"}
(9,1,1) = {"
as
-ad
+Al
ad
ad
ad
@@ -1412,7 +1415,7 @@ ac
"}
(10,1,1) = {"
as
-ab
+Al
ad
ad
ab
@@ -1554,8 +1557,8 @@ ac
"}
(11,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -1696,8 +1699,8 @@ ac
"}
(12,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -1838,8 +1841,8 @@ ac
"}
(13,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -1980,8 +1983,8 @@ ac
"}
(14,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2122,8 +2125,8 @@ ac
"}
(15,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2264,8 +2267,8 @@ ac
"}
(16,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2406,8 +2409,8 @@ ac
"}
(17,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2548,8 +2551,8 @@ ac
"}
(18,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2690,8 +2693,8 @@ ac
"}
(19,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2832,8 +2835,8 @@ ac
"}
(20,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -2974,8 +2977,8 @@ ac
"}
(21,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3116,8 +3119,8 @@ ac
"}
(22,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3258,8 +3261,8 @@ ac
"}
(23,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3400,8 +3403,8 @@ ac
"}
(24,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3542,8 +3545,8 @@ ac
"}
(25,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3684,8 +3687,8 @@ ac
"}
(26,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3826,8 +3829,8 @@ ac
"}
(27,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -3968,8 +3971,8 @@ ac
"}
(28,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4110,8 +4113,8 @@ ac
"}
(29,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4252,8 +4255,8 @@ ac
"}
(30,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4394,8 +4397,8 @@ ac
"}
(31,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4536,8 +4539,8 @@ ac
"}
(32,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4678,8 +4681,8 @@ ac
"}
(33,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4820,8 +4823,8 @@ ac
"}
(34,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -4962,8 +4965,8 @@ ac
"}
(35,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5104,8 +5107,8 @@ ac
"}
(36,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5246,8 +5249,8 @@ ac
"}
(37,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
Em
@@ -5388,8 +5391,8 @@ ac
"}
(38,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5530,8 +5533,8 @@ ac
"}
(39,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5672,8 +5675,8 @@ ac
"}
(40,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5814,8 +5817,8 @@ ac
"}
(41,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -5956,8 +5959,8 @@ ac
"}
(42,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6098,8 +6101,8 @@ ac
"}
(43,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6240,8 +6243,8 @@ ac
"}
(44,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6382,8 +6385,8 @@ ac
"}
(45,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6524,8 +6527,8 @@ ac
"}
(46,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6666,8 +6669,8 @@ ac
"}
(47,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6808,8 +6811,8 @@ ac
"}
(48,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -6950,8 +6953,8 @@ ac
"}
(49,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7092,8 +7095,8 @@ ac
"}
(50,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7234,8 +7237,8 @@ ac
"}
(51,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7376,8 +7379,8 @@ ac
"}
(52,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7518,8 +7521,8 @@ ac
"}
(53,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7660,8 +7663,8 @@ ac
"}
(54,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7802,8 +7805,8 @@ ac
"}
(55,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -7944,8 +7947,8 @@ ac
"}
(56,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8086,8 +8089,8 @@ ac
"}
(57,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8228,8 +8231,8 @@ ac
"}
(58,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8370,8 +8373,8 @@ ac
"}
(59,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8512,8 +8515,8 @@ ac
"}
(60,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8654,8 +8657,8 @@ ac
"}
(61,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8796,8 +8799,8 @@ ac
"}
(62,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -8938,7 +8941,7 @@ ac
"}
(63,1,1) = {"
as
-ab
+Al
ad
ad
ab
@@ -9080,7 +9083,7 @@ ac
"}
(64,1,1) = {"
at
-an
+ID
an
an
an
@@ -10784,7 +10787,7 @@ ac
"}
(76,1,1) = {"
at
-an
+ID
an
an
an
@@ -10926,7 +10929,7 @@ ac
"}
(77,1,1) = {"
as
-ad
+Al
ad
ad
ab
@@ -11068,8 +11071,8 @@ ac
"}
(78,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11210,8 +11213,8 @@ ac
"}
(79,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11352,8 +11355,8 @@ ac
"}
(80,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11494,8 +11497,8 @@ ac
"}
(81,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11636,8 +11639,8 @@ ac
"}
(82,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11778,8 +11781,8 @@ ac
"}
(83,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -11920,8 +11923,8 @@ ac
"}
(84,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12062,8 +12065,8 @@ ac
"}
(85,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12204,8 +12207,8 @@ ac
"}
(86,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12346,8 +12349,8 @@ ac
"}
(87,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12488,8 +12491,8 @@ ac
"}
(88,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12630,8 +12633,8 @@ ac
"}
(89,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12772,8 +12775,8 @@ ac
"}
(90,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -12914,8 +12917,8 @@ ac
"}
(91,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13056,8 +13059,8 @@ ac
"}
(92,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13198,8 +13201,8 @@ ac
"}
(93,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13340,8 +13343,8 @@ ac
"}
(94,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13482,8 +13485,8 @@ ac
"}
(95,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13624,8 +13627,8 @@ ac
"}
(96,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13766,8 +13769,8 @@ ac
"}
(97,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -13908,8 +13911,8 @@ ac
"}
(98,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14050,8 +14053,8 @@ ac
"}
(99,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14192,8 +14195,8 @@ ac
"}
(100,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14334,8 +14337,8 @@ ac
"}
(101,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14476,8 +14479,8 @@ ac
"}
(102,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14618,8 +14621,8 @@ ac
"}
(103,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14760,8 +14763,8 @@ ac
"}
(104,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -14902,8 +14905,8 @@ ac
"}
(105,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15044,8 +15047,8 @@ ac
"}
(106,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15186,8 +15189,8 @@ ac
"}
(107,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15328,8 +15331,8 @@ ac
"}
(108,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15470,8 +15473,8 @@ ac
"}
(109,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15612,8 +15615,8 @@ ac
"}
(110,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15754,8 +15757,8 @@ ac
"}
(111,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -15896,8 +15899,8 @@ ac
"}
(112,1,1) = {"
as
-ab
-ab
+Al
+ad
BE
ab
ab
@@ -16038,8 +16041,8 @@ ac
"}
(113,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16180,8 +16183,8 @@ ac
"}
(114,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16322,8 +16325,8 @@ ac
"}
(115,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16464,8 +16467,8 @@ ac
"}
(116,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16606,8 +16609,8 @@ ac
"}
(117,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16748,8 +16751,8 @@ ac
"}
(118,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -16890,8 +16893,8 @@ ac
"}
(119,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17032,8 +17035,8 @@ ac
"}
(120,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17174,8 +17177,8 @@ ac
"}
(121,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17316,8 +17319,8 @@ ac
"}
(122,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17458,8 +17461,8 @@ ac
"}
(123,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17600,8 +17603,8 @@ ac
"}
(124,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
Em
ab
@@ -17742,8 +17745,8 @@ ac
"}
(125,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -17884,8 +17887,8 @@ ac
"}
(126,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -18026,8 +18029,8 @@ ac
"}
(127,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -18168,8 +18171,8 @@ ac
"}
(128,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -18310,8 +18313,8 @@ ac
"}
(129,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -18452,8 +18455,8 @@ ac
"}
(130,1,1) = {"
as
-ab
-ab
+Al
+ad
ab
ab
ab
@@ -18594,9 +18597,9 @@ ac
"}
(131,1,1) = {"
as
-ab
-ab
-ab
+Al
+ad
+ad
ab
ab
ab
@@ -18736,9 +18739,9 @@ ac
"}
(132,1,1) = {"
as
-ab
-ab
-ab
+Al
+ad
+ad
ad
ab
ab
@@ -18878,8 +18881,8 @@ ac
"}
(133,1,1) = {"
as
+Al
ad
-ab
ad
ad
ad
@@ -19020,7 +19023,7 @@ ac
"}
(134,1,1) = {"
as
-ad
+Al
ad
ad
ad
@@ -19162,7 +19165,7 @@ ac
"}
(135,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -19304,7 +19307,7 @@ ac
"}
(136,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -19446,7 +19449,7 @@ ac
"}
(137,1,1) = {"
as
-bF
+Al
bF
bF
bF
@@ -19588,7 +19591,7 @@ ac
"}
(138,1,1) = {"
as
-bF
+Al
bF
bF
bF
diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm
index 23c94f3b30..11972d9de4 100644
--- a/maps/tether/tether_defines.dm
+++ b/maps/tether/tether_defines.dm
@@ -87,7 +87,7 @@
shuttle_recall_message = "The scheduled crew transfer has been cancelled."
shuttle_name = "Automated Tram"
emergency_shuttle_docked_message = "The evacuation tram has arrived at the tram station. You have approximately %ETD% to board the tram."
- emergency_shuttle_leaving_dock = "The emergency tram has left the station. Estimate %ETA% until the shuttle arrives at %dock_name%."
+ emergency_shuttle_leaving_dock = "The emergency tram has left the station. Estimate %ETA% until the tram arrives at %dock_name%."
emergency_shuttle_called_message = "An emergency evacuation has begun, and an off-schedule tram has been called. It will arrive at the tram station in approximately %ETA%."
emergency_shuttle_recall_message = "The evacuation tram has been recalled."
@@ -288,8 +288,8 @@
// For making the 6-in-1 holomap, we calculate some offsets
#define TETHER_MAP_SIZE 140 // Width and height of compiled in tether z levels.
#define TETHER_HOLOMAP_CENTER_GUTTER 40 // 40px central gutter between columns
-#define TETHER_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*TETHER_MAP_SIZE) - TETHER_HOLOMAP_CENTER_GUTTER) / 2) // 100
-#define TETHER_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*TETHER_MAP_SIZE)) / 2) // 60
+#define TETHER_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*TETHER_MAP_SIZE) - TETHER_HOLOMAP_CENTER_GUTTER) / 2) // 80
+#define TETHER_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*TETHER_MAP_SIZE)) / 2) // 30
// We have a bunch of stuff common to the station z levels
/datum/map_z_level/tether/station
diff --git a/rust_g b/rust_g
deleted file mode 100644
index 57684fff77..0000000000
Binary files a/rust_g and /dev/null differ
diff --git a/rust_g.dll b/rust_g.dll
index 9438c14445..5e60ff2cd4 100644
Binary files a/rust_g.dll and b/rust_g.dll differ
diff --git a/sound/effects/mob_effects/f_scream_1.ogg b/sound/effects/mob_effects/f_scream_1.ogg
new file mode 100644
index 0000000000..c0f80a1408
Binary files /dev/null and b/sound/effects/mob_effects/f_scream_1.ogg differ
diff --git a/sound/effects/mob_effects/f_scream_2.ogg b/sound/effects/mob_effects/f_scream_2.ogg
new file mode 100644
index 0000000000..978a236dd1
Binary files /dev/null and b/sound/effects/mob_effects/f_scream_2.ogg differ
diff --git a/sound/effects/mob_effects/f_scream_3.ogg b/sound/effects/mob_effects/f_scream_3.ogg
new file mode 100644
index 0000000000..30e4150a56
Binary files /dev/null and b/sound/effects/mob_effects/f_scream_3.ogg differ
diff --git a/sound/effects/mob_effects/f_scream_4.ogg b/sound/effects/mob_effects/f_scream_4.ogg
new file mode 100644
index 0000000000..96a08297b2
Binary files /dev/null and b/sound/effects/mob_effects/f_scream_4.ogg differ
diff --git a/sound/effects/mob_effects/m_scream_1.ogg b/sound/effects/mob_effects/m_scream_1.ogg
new file mode 100644
index 0000000000..989b612ab1
Binary files /dev/null and b/sound/effects/mob_effects/m_scream_1.ogg differ
diff --git a/sound/effects/mob_effects/m_scream_2.ogg b/sound/effects/mob_effects/m_scream_2.ogg
new file mode 100644
index 0000000000..902db1c132
Binary files /dev/null and b/sound/effects/mob_effects/m_scream_2.ogg differ
diff --git a/sound/effects/mob_effects/m_scream_3.ogg b/sound/effects/mob_effects/m_scream_3.ogg
new file mode 100644
index 0000000000..62f787d4a7
Binary files /dev/null and b/sound/effects/mob_effects/m_scream_3.ogg differ
diff --git a/sound/effects/mob_effects/m_scream_4.ogg b/sound/effects/mob_effects/m_scream_4.ogg
new file mode 100644
index 0000000000..2aec2c7149
Binary files /dev/null and b/sound/effects/mob_effects/m_scream_4.ogg differ
diff --git a/sound/effects/mob_effects/x_scream1.ogg b/sound/effects/mob_effects/x_scream1.ogg
new file mode 100644
index 0000000000..869e6b27c8
Binary files /dev/null and b/sound/effects/mob_effects/x_scream1.ogg differ
diff --git a/sound/effects/mob_effects/x_scream2.ogg b/sound/effects/mob_effects/x_scream2.ogg
new file mode 100644
index 0000000000..9c86cba70a
Binary files /dev/null and b/sound/effects/mob_effects/x_scream2.ogg differ
diff --git a/sound/effects/mob_effects/x_scream3.ogg b/sound/effects/mob_effects/x_scream3.ogg
new file mode 100644
index 0000000000..1f1551029e
Binary files /dev/null and b/sound/effects/mob_effects/x_scream3.ogg differ
diff --git a/sound/items/small_motor/motor_end.ogg b/sound/items/small_motor/motor_end.ogg
new file mode 100644
index 0000000000..e175bfad46
Binary files /dev/null and b/sound/items/small_motor/motor_end.ogg differ
diff --git a/sound/items/small_motor/motor_fast.ogg b/sound/items/small_motor/motor_fast.ogg
new file mode 100644
index 0000000000..317ca4be4f
Binary files /dev/null and b/sound/items/small_motor/motor_fast.ogg differ
diff --git a/sound/items/small_motor/motor_faster.ogg b/sound/items/small_motor/motor_faster.ogg
new file mode 100644
index 0000000000..bc8e89d495
Binary files /dev/null and b/sound/items/small_motor/motor_faster.ogg differ
diff --git a/sound/items/small_motor/motor_idle.ogg b/sound/items/small_motor/motor_idle.ogg
new file mode 100644
index 0000000000..01bc22de51
Binary files /dev/null and b/sound/items/small_motor/motor_idle.ogg differ
diff --git a/sound/items/small_motor/motor_pull_attempt.ogg b/sound/items/small_motor/motor_pull_attempt.ogg
new file mode 100644
index 0000000000..d7475dbae2
Binary files /dev/null and b/sound/items/small_motor/motor_pull_attempt.ogg differ
diff --git a/sound/items/small_motor/motor_start_nopull.ogg b/sound/items/small_motor/motor_start_nopull.ogg
new file mode 100644
index 0000000000..35bb4c6e6c
Binary files /dev/null and b/sound/items/small_motor/motor_start_nopull.ogg differ
diff --git a/sound/items/small_motor/motor_start_pull.ogg b/sound/items/small_motor/motor_start_pull.ogg
new file mode 100644
index 0000000000..45e456077e
Binary files /dev/null and b/sound/items/small_motor/motor_start_pull.ogg differ
diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.js b/tgui/packages/tgui/interfaces/CommunicationsConsole.js
index d76abba47d..dc2934cbd6 100644
--- a/tgui/packages/tgui/interfaces/CommunicationsConsole.js
+++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.js
@@ -81,7 +81,7 @@ const CommunicationsConsoleMain = (props, context) => {
key={slevel.name}
icon={slevel.icon}
content={slevel.name}
- disabled={!authmax}
+ disabled={!authenticated}
selected={slevel.id === security_level}
onClick={() => act('newalertlevel', { level: slevel.id })} />
);
@@ -89,15 +89,8 @@ const CommunicationsConsoleMain = (props, context) => {
return (
-
+
-
- {alertLevelText}
-
-
- {alertLevelButtons}
-
{
+
+ {alertLevelText}
+
+
+ {alertLevelButtons}
+
35;return(0,o.createVNode)(1,"div",(0,r.classes)(["Tooltip",c&&"Tooltip--long",a&&"Tooltip--"+a,i&&"Tooltip--scale--"+Math.floor(i)]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(0),r=n(10),a=n(19);t.Dimmer=function(e){var t=e.className,n=e.children,i=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Dimmer"].concat(t))},i,{children:(0,o.createVNode)(1,"div","Dimmer__inner",n,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var o=n(0),r=n(10);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,o.createVNode)(1,"div",(0,r.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var o=n(0),r=n(10),a=n(19);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.className,n=e.direction,o=e.wrap,a=e.align,c=e.alignContent,l=e.justify,d=e.inline,u=e.spacing,s=void 0===u?0:u,m=e.spacingPrecise,p=void 0===m?0:m,h=i(e,["className","direction","wrap","align","alignContent","justify","inline","spacing","spacingPrecise"]);return Object.assign({className:(0,r.classes)(["Flex",Byond.IS_LTE_IE10&&("column"===n?"Flex--iefix--column":"Flex--iefix"),d&&"Flex--inline",s>0&&"Flex--spacing--"+s,p>0&&"Flex--spacingPrecise--"+p,t]),style:Object.assign({},h.style,{"flex-direction":n,"flex-wrap":o,"align-items":a,"align-content":c,"justify-content":l})},h)};t.computeFlexProps=c;var l=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},c(e))))};t.Flex=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.className,n=e.grow,o=e.order,c=e.shrink,l=e.basis,d=void 0===l?e.width:l,u=e.align,s=i(e,["className","grow","order","shrink","basis","align"]);return Object.assign({className:(0,r.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",t]),style:Object.assign({},s.style,{"flex-grow":n,"flex-shrink":c,"flex-basis":(0,a.unit)(d),order:o,"align-self":u})},s)};t.computeFlexItemProps=d;var u=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},d(e))))};t.FlexItem=u,u.defaultHooks=r.pureComponentHooks,l.Item=u},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(0),r=n(10),a=n(19);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.className,n=e.collapsing,c=e.children,l=i(e,["className","collapsing","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"table",(0,r.classes)(["Table",n&&"Table--collapsing",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Table=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.header,c=i(e,["className","header"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"tr",(0,r.classes)(["Table__row",n&&"Table__row--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(c))))};t.TableRow=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.className,n=e.collapsing,c=e.header,l=i(e,["className","collapsing","header"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"td",(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(l))))};t.TableCell=d,d.defaultHooks=r.pureComponentHooks,c.Row=l,c.Cell=d},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var o=n(0),r=n(10),a=n(19),i=n(180),c=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.color,d=e.textAlign,u=e.verticalAlign,s=e.buttons,m=e.content,p=e.children;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,verticalAlign:u,className:(0,r.classes)(["LabeledList__cell","LabeledList__label"]),children:n?n+":":null}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:l,textAlign:d,verticalAlign:u,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:s?undefined:2,children:[m,p]}),s&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",s,0)],0)};t.LabeledListItem=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.size?(0,a.unit)(Math.max(0,e.size-1)):0;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,i.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};t.LabeledListDivider=d,d.defaultHooks=r.pureComponentHooks,c.Item=l,c.Divider=d},function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var o=n(0),r=n(10),a=n(7),i=n(1),c=n(2),l=n(28),d=n(125),u=n(174),s=n(24),m=n(176),p=n(126);var h=(0,s.createLogger)("Window"),f=[400,600],C=function(e){var t,n;function c(){return e.apply(this,arguments)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=c.prototype;return s.componentDidMount=function(){var e=(0,i.useBackend)(this.context),t=e.config;if(!e.suspended){h.log("mounting");var n=Object.assign({size:f},t.window);this.props.width&&this.props.height&&(n.size=[this.props.width,this.props.height]),(0,u.setWindowKey)(t.window.key),(0,u.recallWindowGeometry)(t.window.key,n),(0,p.refocusLayout)()}},s.render=function(){var e,t=this.props,n=t.resizable,c=t.theme,s=t.title,f=t.children,C=(0,i.useBackend)(this.context),N=C.config,V=C.suspended,g=(0,d.useDebug)(this.context).debugLayout,v=(0,m.useDispatch)(this.context),k=null==(e=N.window)?void 0:e.fancy,y=N.user.observer?N.status=0||(r[n]=e[n]);return r}(e,["className","fitted","scrollable","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,p.Layout.Content,Object.assign({scrollable:a,className:(0,r.classes)(["Window__content",t])},c,{children:n&&i||(0,o.createVNode)(1,"div","Window__contentPadding",i,0)})))};var N=function(e){switch(e){case l.UI_INTERACTIVE:return"good";case l.UI_UPDATE:return"average";case l.UI_DISABLED:default:return"bad"}},b=function(e,t){var n=e.className,i=e.title,l=e.status,d=e.fancy,u=e.onDragStart,s=e.onClose;(0,m.useDispatch)(t);return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",n]),[(0,o.createComponentVNode)(2,c.Icon,{className:"TitleBar__statusIcon",color:N(l),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title","string"==typeof i&&i===i.toLowerCase()&&(0,a.toTitleCase)(i)||i,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return d&&u(e)}}),!1,!!d&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:s})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.InterfaceLockNoticeBox=void 0;var o=n(0),r=n(1),a=n(2);t.InterfaceLockNoticeBox=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.siliconUser,d=void 0===l?c.siliconUser:l,u=e.locked,s=void 0===u?c.locked:u,m=e.normallyLocked,p=void 0===m?c.normallyLocked:m,h=e.onLockStatusChange,f=void 0===h?function(){return i("lock")}:h,C=e.accessText,N=void 0===C?"an ID card":C,b=e.deny,V=void 0!==b&&b,g=e.denialMessage;return V?void 0===g?"Error.":g:d?(0,o.createComponentVNode)(2,a.NoticeBox,{color:d&&"grey",children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:"Interface lock status:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1"}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{m:"0",color:p?"red":"green",icon:p?"lock":"unlock",content:p?"Locked":"Unlocked",onClick:function(){f&&f(!s)}})})]})}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe ",N," ","to ",s?"unlock":"lock"," this interface."]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControlContent=t.AtmosControl=void 0;var o=n(0),r=n(8),a=n(3),i=n(2),c=n(1);(0,n(24).createLogger)("fuck");t.AtmosControl=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{width:600,height:440,resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n,a=(0,c.useBackend)(t),l=a.act,d=a.data,u=a.config,s=(0,r.sortBy)((function(e){return e.name}))(d.alarms||[]),m=(0,c.useLocalState)(t,"tabIndex",0),p=m[0],h=m[1],f=(0,c.useLocalState)(t,"zoom",1),C=f[0],N=f[1];return 0===p?n=(0,o.createComponentVNode)(2,i.Section,{title:"Alarms",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,color:2===e.danger?"bad":1===e.danger?"average":"",onClick:function(){return l("alarm",{alarm:e.ref})}},e.name)}))}):1===p&&(n=(0,o.createComponentVNode)(2,i.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,i.NanoMap,{onZoom:function(e){return N(e)},children:s.filter((function(e){return~~e.z==~~u.mapZLevel})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:C,icon:"bell",tooltip:e.name,color:e.danger?"red":"green",onClick:function(){return l("alarm",{alarm:e.ref})}},e.ref)}))})})),(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===p,onClick:function(){return h(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Alarm View"]},"AlarmView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===p,onClick:function(){return h(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:n})],4)};t.AtmosControlContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.CameraConsoleSearch=t.CameraConsoleContent=t.CameraConsole=void 0;var o=n(0),r=n(8),a=n(44),i=n(10),c=n(7),l=n(1),d=n(2),u=n(3),s=function(e,t,n){void 0===t&&(t=""),void 0===n&&(n="");var o=(0,c.createSearch)(t,(function(e){return e.name}));return(0,a.flow)([(0,r.filter)((function(e){return null==e?void 0:e.name})),t&&(0,r.filter)(o),n&&(0,r.filter)((function(e){return e.networks.includes(n)})),(0,r.sortBy)((function(e){return e.name}))])(e)};t.CameraConsole=function(e,t){return(0,o.createComponentVNode)(2,u.Window,{width:870,height:708,resizable:!0,children:(0,o.createComponentVNode)(2,m)})};var m=function(e,t){var n=(0,l.useBackend)(t),r=n.act,a=n.data,i=(n.config,a.mapRef),c=a.activeCamera,m=function(e,t){var n,o;if(!t)return[];var r=e.findIndex((function(e){return e.name===t.name}));return[null==(n=e[r-1])?void 0:n.name,null==(o=e[r+1])?void 0:o.name]}(s(a.cameras),c);m[0],m[1];return(0,o.createFragment)([(0,o.createVNode)(1,"div","CameraConsole__left",(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,p)}),2),(0,o.createVNode)(1,"div","CameraConsole__right",[(0,o.createVNode)(1,"div","CameraConsole__toolbar",[(0,o.createVNode)(1,"b",null,"Camera: ",16),c&&c.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-left",onClick:function(){return r("pan",{dir:8})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-up",onClick:function(){return r("pan",{dir:1})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-right",onClick:function(){return r("pan",{dir:4})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-down",onClick:function(){return r("pan",{dir:2})}})],4),(0,o.createComponentVNode)(2,d.ByondUi,{className:"CameraConsole__map",params:{id:i,type:"map"}})],4)],4)};t.CameraConsoleContent=m;var p=function(e,t){var n=(0,l.useBackend)(t),r=n.act,a=n.data,c=(0,l.useLocalState)(t,"searchText",""),m=c[0],p=c[1],h=(0,l.useLocalState)(t,"networkFilter",""),f=h[0],C=h[1],N=a.activeCamera,b=a.allNetworks;b.sort();var V=s(a.cameras,m,f);return(0,o.createFragment)([(0,o.createComponentVNode)(2,d.Input,{fluid:!0,mb:1,placeholder:"Search for a camera",onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,d.Dropdown,{mb:1,width:"177px",options:b,placeholder:"No Filter",onSelected:function(e){return C(e)}}),(0,o.createComponentVNode)(2,d.Section,{children:V.map((function(e){return(0,o.createVNode)(1,"div",(0,i.classes)(["Button","Button--fluid","Button--color--transparent","Button--ellipsis",N&&e.name===N.name&&"Button--selected"]),e.name,0,{title:e.name,onClick:function(){(0,u.refocusLayout)(),r("switch_camera",{name:e.name})}},e.name)}))})],4)};t.CameraConsoleSearch=p},function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(0),r=n(2),a=n(493),i=function(e){var t=e.beakerLoaded,n=e.beakerContents,a=void 0===n?[]:n,i=e.buttons;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===a.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),a.map((function(e,t){return(0,o.createComponentVNode)(2,r.Box,{width:"100%",children:[(0,o.createComponentVNode)(2,r.Box,{color:"label",display:"inline",verticalAlign:"middle",children:[(n=e.volume,n+" unit"+(1===n?"":"s"))," of ",e.name]}),!!i&&(0,o.createComponentVNode)(2,r.Box,{float:"right",display:"inline",children:i(e,t)}),(0,o.createComponentVNode)(2,r.Box,{clear:"both"})]},e.name);var n}))]})};t.BeakerContents=i,i.propTypes={beakerLoaded:a.bool,beakerContents:a.array,buttons:a.arrayOf(a.element)}},function(e,t,n){"use strict";t.__esModule=!0,t.CommunicationsConsoleContent=t.CommunicationsConsole=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.CommunicationsConsole=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:400,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.menu_state),c=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["ERRROR. Unknown menu_state: ",i,"Please report this to NT Technical Support."]});return 1===i?c=(0,o.createComponentVNode)(2,l):2===i?c=(0,o.createComponentVNode)(2,s):3===i&&(c=(0,o.createComponentVNode)(2,u)),(0,o.createFragment)([(0,o.createComponentVNode)(2,d),c],0)};t.CommunicationsConsoleContent=c;var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.messages,d=c.msg_cooldown,u=c.emagged,s=c.cc_cooldown,m=c.str_security_level,p=c.levels,h=c.authmax,f=c.security_level,C=c.security_level_color,N=c.authenticated,b=c.atcsquelch,V=c.boss_short,g="View ("+l.length+")",v="Make Priority Announcement";d>0&&(v+=" ("+d+"s)");var k=u?"Message [UNKNOWN]":"Message "+V;s>0&&(k+=" ("+s+"s)");var y=m,_=p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.name,disabled:!h,selected:e.id===f,onClick:function(){return i("newalertlevel",{level:e.id})}},e.name)}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Site Director-Only Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Alert",color:C,children:y}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Change Alert",children:_}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",content:v,disabled:!h||d>0,onClick:function(){return i("announce")}})}),!!u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",color:"red",content:k,disabled:!h||s>0,onClick:function(){return i("MessageSyndicate")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!h,onClick:function(){return i("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",content:k,disabled:!h||s>0,onClick:function(){return i("MessageCentCom")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,a.Button,{icon:"tv",content:"Change Status Displays",disabled:!N,onClick:function(){return i("status")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,a.Button,{icon:"folder-open",content:g,disabled:!N,onClick:function(){return i("messagelist")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,a.Button,{icon:"microphone",content:b?"ATC Relay Disabled":"ATC Relay Enabled",disabled:!N,selected:b,onClick:function(){return i("toggleatc")}})})]})})],4)},d=function(e,t){var n,i=(0,r.useBackend)(t),c=i.act,l=i.data,d=l.authenticated,u=l.is_ai,s=l.esc_status,m=l.esc_callable,p=l.esc_recallable;return n=d?u?"AI":1===d?"Command":2===d?"Site Director":"ERROR: Report This Bug!":"Not Logged In",(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access Level",children:"AI"})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{icon:d?"sign-out-alt":"id-card",selected:d,content:d?"Log Out ("+n+")":"Log In",onClick:function(){return c("auth")}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:s}),!!m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rocket",content:"Call Shuttle",disabled:!d,onClick:function(){return c("callshuttle")}})}),!!p&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Recall Shuttle",disabled:!d||u,onClick:function(){return c("cancelshuttle")}})})]})})],4)},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.message_current,d=c.message_deletion_allowed,u=c.authenticated,s=c.messages;if(l)return(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Return To Message List",disabled:!u,onClick:function(){return i("messagelist")}}),children:(0,o.createComponentVNode)(2,a.Box,{children:l.contents})});var m=s.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View",disabled:!u||l&&l.title===e.title,onClick:function(){return i("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete",disabled:!u||!d,onClick:function(){return i("delmessage",{msgid:e.id})}})]},e.id)}));return(0,o.createComponentVNode)(2,a.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return i("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.length&&m||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"404",color:"bad",children:"No messages."})})})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.stat_display,d=c.authenticated,u=l.presets.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.name===l.type,disabled:!d,onClick:function(){return i("setstat",{statdisp:e.name})}},e.name)}));return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return i("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:l.line_1,disabled:!d,onClick:function(){return i("setmsg1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:l.line_2,disabled:!d,onClick:function(){return i("setmsg2")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitorContent=t.CrewMonitor=void 0;var o=n(0),r=n(8),a=n(44),i=n(1),c=n(3),l=n(2),d=function(e){return e.dead?"Deceased":1===parseInt(e.stat,10)?"Unconscious":"Living"},u=function(e){return e.dead?"red":1===parseInt(e.stat,10)?"orange":"green"};t.CrewMonitor=function(){return(0,o.createComponentVNode)(2,c.Window,{width:800,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,s)})})};var s=function(e,t){var n,c=(0,i.useBackend)(t),s=c.act,p=c.data,h=(c.config,(0,i.useLocalState)(t,"tabIndex",0)),f=h[0],C=h[1],N=(0,a.flow)([(0,r.sortBy)((function(e){return e.name})),(0,r.sortBy)((function(e){return null==e?void 0:e.x})),(0,r.sortBy)((function(e){return null==e?void 0:e.y})),(0,r.sortBy)((function(e){return null==e?void 0:e.realZ}))])(p.crewmembers||[]),b=(0,i.useLocalState)(t,"zoom",1);b[0],b[1];return n=0===f?(0,o.createComponentVNode)(2,l.Table,{children:[(0,o.createComponentVNode)(2,l.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Location"})]}),N.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:[(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:u(e),children:d(e)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,l.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"red",children:e.brute}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"orange",children:e.fire}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"green",children:e.tox}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"blue",children:e.oxy}),")"]}):null]}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:3===e.sensor_type?p.isAI?(0,o.createComponentVNode)(2,l.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return s("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+", "+e.z+")":"Not Available"})]},e.ref)}))]}):1===f?(0,o.createComponentVNode)(2,m):"ERROR",(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Tabs,{children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===f,onClick:function(){return C(0)},children:[(0,o.createComponentVNode)(2,l.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===f,onClick:function(){return C(1)},children:[(0,o.createComponentVNode)(2,l.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),(0,o.createComponentVNode)(2,l.Box,{m:2,children:n})],4)};t.CrewMonitorContent=s;var m=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.config),a=n.data,c=(0,i.useLocalState)(t,"zoom",1),d=c[0],s=c[1];return(0,o.createComponentVNode)(2,l.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,l.NanoMap,{onZoom:function(e){return s(e)},children:a.crewmembers.filter((function(e){return 3===e.sensor_type&&~~e.realZ==~~r.mapZLevel})).map((function(e){return(0,o.createComponentVNode)(2,l.NanoMap.Marker,{x:e.x,y:e.y,zoom:d,icon:"circle",tooltip:e.name+" ("+e.assignment+")",color:u(e)},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CryoStorageItems=t.CryoStorageCrew=t.CryoStorage=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.CryoStorage=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data),u=d.real_name,s=d.allow_items,m=(0,r.useLocalState)(t,"tab",0),p=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{width:400,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===p,onClick:function(){return h(0)},children:"Crew"}),!!s&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===p,onClick:function(){return h(1)},children:"Items"})]}),(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:["Welcome, ",u,"."]}),0===p&&(0,o.createComponentVNode)(2,c),!!s&&1===p&&(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.crew);return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Crew",children:i.length&&i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{color:"label",children:e},e)}))||(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"No crew currently stored."})})};t.CryoStorageCrew=c;var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.items;return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hand-rock",onClick:function(){return i("allitems")},children:"Claim All"}),children:c.length&&c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:"hand-rock",onClick:function(){return i("item",{ref:e.ref})},children:e.name},e.ref)}))||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No items stored."})})};t.CryoStorageItems=l},function(e,t,n){"use strict";t.__esModule=!0,t.RankIcon=void 0;var o=n(0),r=n(2),a={"Colony Director":"user-tie","Site Manager":"user-tie",Overseer:"user-tie","Head of Personnel":"briefcase","Crew Resources Officer":"briefcase","Deputy Director":"briefcase","Command Secretary":"user-tie","Head of Security":"user-shield","Security Commander":"user-shield","Chief of Security":"user-shield",Warden:["city","shield-alt"],Detective:"search","Forensic Technician":"search","Security Officer":"user-shield","Junior Officer":"user-shield","Chief Engineer":"toolbox","Atmospheric Technician":"wind","Station Engineer":"toolbox","Maintenance Technician":"wrench","Engine Technician":"toolbox",Electrician:"toolbox","Chief Medical Officer":"user-md",Chemist:"mortar-pestle",Pharmacist:"mortar-pestle","Medical Doctor":"user-md",Surgeon:"user-md","Emergency Physician":"user-md",Nurse:"user-md",Virologist:"disease",Paramedic:"ambulance","Emergency Medical Technician":"ambulance",Psychiatrist:"couch",Psychologist:"couch","Research Director":"user-graduate","Research Supervisor":"user-graduate",Roboticist:"robot","Biomechanical Engineer":["wrench","heartbeat"],"Mechatronic Engineer":"wrench",Scientist:"flask",Xenoarchaeologist:"flask",Anomalist:"flask","Phoron Researcher":"flask","Circuit Designer":"car-battery",Xenobiologist:"meteor",Xenobotanist:["biohazard","seedling"],Quartermaster:"box-open","Supply Chief":"warehouse","Cargo Technician":"box-open","Shaft Miner":"hard-hat","Drill Technician":"hard-hat",Pathfinder:"binoculars",Explorer:"user-astronaut","Field Medic":["user-md","user-astronaut"],Pilot:"space-shuttle",Bartender:"glass-martini",Barista:"coffee",Botanist:"leaf",Gardener:"leaf",Chaplain:"place-of-worship",Counselor:"couch",Chef:"utensils",Cook:"utensils",Entertainer:"smile-beam",Performer:"smile-beam",Musician:"guitar",Stagehand:"smile-beam",Intern:"school","Apprentice Engineer":["school","wrench"],"Medical Intern":["school","user-md"],"Lab Assistant":["school","flask"],"Security Cadet":["school","shield-alt"],"Jr. Cargo Tech":["school","box"],"Jr. Explorer":["school","user-astronaut"],Server:["school","utensils"],"Internal Affairs Agent":"balance-scale",Janitor:"broom",Custodian:"broom","Sanitation Technician":"hand-sparkles",Maid:"broom",Librarian:"book",Journalist:"newspaper",Writer:"book",Historian:"chalkboard-teacher",Professor:"chalkboard-teacher",Visitor:"user","Emergency Responder":"fighter-jet"};t.RankIcon=function(e,t){var n=e.rank,i=e.color,c=void 0===i?"label":i,l=a[n];return"string"==typeof l?(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:l,size:2}):Array.isArray(l)?l.map((function(e){return(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:e,size:2},e)})):(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:"user",size:2})}},function(e,t,n){"use strict";t.__esModule=!0,t.MiningUser=void 0;var o=n(0),r=n(1),a=n(2);t.MiningUser=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.insertIdText,d=c.has_id,u=c.id;return(0,o.createComponentVNode)(2,a.NoticeBox,{success:d,children:d?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",u.name,".",(0,o.createVNode)(1,"br"),"You have ",u.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return i("logoff")}}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})],4):l})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosEmailClientViewMessage=t.NtosEmailClient=void 0;var o=n(0),r=n(1),a=n(2),i=n(3),c=n(5);t.NtosEmailClient=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.PC_device_theme,u=a.error,s=a.downloading,m=a.current_account,p=(0,o.createComponentVNode)(2,f);return u?p=(0,o.createComponentVNode)(2,h,{error:u}):s?p=(0,o.createComponentVNode)(2,l):m&&(p=(0,o.createComponentVNode)(2,d)),(0,o.createComponentVNode)(2,i.NtosWindow,{resizable:!0,theme:c,children:(0,o.createComponentVNode)(2,i.NtosWindow.Content,{scrollable:!0,children:p})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data),l=i.down_filename,d=i.down_progress,u=i.down_size,s=i.down_speed;return(0,o.createComponentVNode)(2,a.Section,{title:"Downloading...",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"File",children:[l," (",u," GQ)"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speed",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," GQ/s"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Progress",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:d,maxValue:u,children:[d,"/",u," (",(0,c.round)(d/u*100,1),"%)"]})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.current_account,d=c.addressbook,h=c.new_message,f=c.cur_title,C=(0,o.createComponentVNode)(2,u);return d?C=(0,o.createComponentVNode)(2,m):h?C=(0,o.createComponentVNode)(2,p):f&&(C=(0,o.createComponentVNode)(2,s)),(0,o.createComponentVNode)(2,a.Section,{title:"Logged in as: "+l,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"plus",tooltip:"New Message",tooltipPosition:"left",onClick:function(){return i("new_message")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cogs",tooltip:"Change Password",tooltipPosition:"left",onClick:function(){return i("changepassword")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",tooltip:"Log Out",tooltipPosition:"left",onClick:function(){return i("logout")}})],4),children:C})},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(c.current_account,c.folder),d=c.messagecount,u=c.messages;return(0,o.createComponentVNode)(2,a.Section,{level:2,noTopPadding:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Inbox"===l,onClick:function(){return i("set_folder",{set_folder:"Inbox"})},children:"Inbox"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Spam"===l,onClick:function(){return i("set_folder",{set_folder:"Spam"})},children:"Spam"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Deleted"===l,onClick:function(){return i("set_folder",{set_folder:"Deleted"})},children:"Deleted"})]}),d&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Source"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Title"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Received At"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Actions"})]}),u.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.source}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",onClick:function(){return i("view",{view:e.uid})},tooltip:"View"}),(0,o.createComponentVNode)(2,a.Button,{icon:"share",onClick:function(){return i("reply",{reply:e.uid})},tooltip:"Reply"}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",onClick:function(){return i("delete",{"delete":e.uid})},tooltip:"Delete"})]})]},e.timestamp+e.title)}))]})})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["No emails found in ",l,"."]})]})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.administrator,d=c.cur_title,u=c.cur_source,s=c.cur_timestamp,m=c.cur_body,p=c.cur_hasattachment,h=c.cur_attachment_filename,f=c.cur_attachment_size,C=c.cur_uid;return(0,o.createComponentVNode)(2,a.Section,{title:d,buttons:l?(0,o.createComponentVNode)(2,a.Button,{icon:"times",onClick:function(){return i("back")}}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"share",tooltip:"Reply",tooltipPosition:"left",onClick:function(){return i("reply",{reply:C})}}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",tooltip:"Delete",tooltipPosition:"left",onClick:function(){return i("delete",{"delete":C})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"save",tooltip:"Save To Disk",tooltipPosition:"left",onClick:function(){return i("save",{save:C})}}),p&&(0,o.createComponentVNode)(2,a.Button,{icon:"paperclip",tooltip:"Save Attachment",tooltipPosition:"left",onClick:function(){return i("downloadattachment")}})||null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",tooltip:"Close",tooltipPosition:"left",onClick:function(){return i("cancel",{cancel:C})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"From",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"At",children:s}),p&&!l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",color:"average",children:[h," (",f,"GQ)"]})||null,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createVNode)(1,"div",null,null,1,{dangerouslySetInnerHTML:{__html:m}})})})]})})};t.NtosEmailClientViewMessage=s;var m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.accounts;return(0,o.createComponentVNode)(2,a.Section,{title:"Address Book",level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("set_recipient",{set_recipient:null})}}),children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.login,fluid:!0,onClick:function(){return i("set_recipient",{set_recipient:e.login})}},e.login)}))})},p=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(c.current_account,c.msg_title),d=c.msg_recipient,u=c.msg_body,s=c.msg_hasattachment,m=c.msg_attachment_filename,p=c.msg_attachment_size;return(0,o.createComponentVNode)(2,a.Section,{title:"New Message",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"share",onClick:function(){return i("send")},children:"Send Message"}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("cancel")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:l,onInput:function(e,t){return i("edit_title",{val:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Recipient",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:d,onInput:function(e,t){return i("edit_recipient",{val:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"address-book",onClick:function(){return i("addressbook")},tooltip:"Find Receipients",tooltipPosition:"left"})})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachments",buttons:s&&(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("remove_attachment")},children:"Remove Attachment"})||(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return i("addattachment")},children:"Add Attachment"}),children:s&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[m," (",p,"GQ)"]})||null}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{width:"99%",inline:!0,children:(0,o.createVNode)(1,"div",null,null,1,{dangerouslySetInnerHTML:{__html:u}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{verticalAlign:"top",onClick:function(){return i("edit_body")},icon:"pen",tooltip:"Edit Message",tooltipPosition:"left"})})]})})]})})},h=function(e,t){var n=(0,r.useBackend)(t).act,i=e.error;return(0,o.createComponentVNode)(2,a.Section,{title:"Notification",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Return",onClick:function(){return n("reset")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:i})})},f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.stored_login,d=c.stored_password;return(0,o.createComponentVNode)(2,a.Section,{title:"Please Log In",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Email address",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:l,onInput:function(e,t){return i("edit_login",{val:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Password",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:d,onInput:function(e,t){return i("edit_password",{val:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return i("login")},children:"Log In"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OvermapNavigationContent=t.OvermapNavigation=void 0;var o=n(0),r=(n(5),n(1)),a=n(2),i=n(3),c=n(134);t.OvermapNavigation=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:380,height:530,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.sector,u=l.s_x,s=l.s_y,m=l.sector_info,p=l.viewing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Current Location",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:p,onClick:function(){return i("viewing")},children:"Map View"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Location",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Coordiantes",children:[u," : ",s]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Additional Information",children:m})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Flight Data",children:(0,o.createComponentVNode)(2,c.OvermapFlightData,{disableLimiterControls:!0})})],4)};t.OvermapNavigationContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.RCONContent=t.RCON=void 0;var o=n(0),r=n(5),a=n(1),i=n(2),c=n(3);t.RCON=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{width:630,height:440,resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n,r=(0,a.useLocalState)(t,"tabIndex",0),c=r[0],l=r[1];return 0===c?n=(0,o.createComponentVNode)(2,d):1===c&&(n=(0,o.createComponentVNode)(2,u)),(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===c,onClick:function(){return l(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"power-off"})," SMESs"]},"SMESs"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===c,onClick:function(){return l(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"bolt"})," Breakers"]},"Breakers")]}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:n})],4)};t.RCONContent=l;var d=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data.smes_info;return(0,o.createComponentVNode)(2,i.Section,{title:"SMESs",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:l?l.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.RCON_tag,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:.01*e.capacityPercent,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]},children:[(0,r.round)(e.charge/6e4,1)," kWh / ",(0,r.round)(e.capacity/6e4)," kWh (",e.capacityPercent,"%)"]})}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",onClick:function(){return c("smes_in_toggle",{smes:e.RCON_tag})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return c("smes_in_set",{smes:e.RCON_tag})}})],4),children:[e.input_val," kW - ",e.input_set?"ON":"OFF"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",onClick:function(){return c("smes_out_toggle",{smes:e.RCON_tag})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return c("smes_out_set",{smes:e.RCON_tag})}})],4),children:[e.output_val," kW - ",e.output_set?"ONLINE":"OFFLINE"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output Load",children:[e.output_load," kW"]})]})]},e.RCON_tag)})):(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"bad",children:"No SMESs detected."})})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data.breaker_info;return(0,o.createComponentVNode)(2,i.Section,{title:"Breakers",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:c?c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.RCON_tag,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.enabled?"Enabled":"Disabled",selected:e.enabled,color:e.enabled?null:"bad",onClick:function(){return r("toggle_breaker",{breaker:e.RCON_tag})}})},e.RCON_tag)})):(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"bad",children:"No breakers detected."})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShutoffMonitorContent=t.ShutoffMonitor=void 0;var o=n(0),r=n(1),a=n(3),i=n(2);t.ShutoffMonitor=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{width:627,height:700,resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.valves;return(0,o.createComponentVNode)(2,i.Section,{title:"Valves",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Position"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Open"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Mode"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Actions"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[e.x,", ",e.y,", ",e.z]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.open?"Yes":"No"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.enabled?"Auto":"Manual"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.open?"Opened":"Closed",selected:e.open,disabled:!e.enabled,onClick:function(){return a("toggle_open",{valve:e.ref})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.enabled?"Auto":"Manual",selected:e.enabled,onClick:function(){return a("toggle_enable",{valve:e.ref})}})]})]},e.name)}))]})})};t.ShutoffMonitorContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,i.Window,{width:425,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.categories;return(void 0===c?[]:c).map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.category,children:(0,o.createVNode)(1,"ul",null,[0===e.alarms.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),e.alarms.map((function(e){var t="";return e.has_cameras?t=(0,o.createComponentVNode)(2,a.Section,{children:e.cameras.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{disabled:e.deact,content:e.name+(e.deact?" (deactived)":""),icon:"video",onClick:function(){return i("switchTo",{camera:e.camera})}},e.name)}))}):e.lost_sources&&(t=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Lost Alarm Sources: ",e.lost_sources]})),(0,o.createVNode)(1,"li",null,[e.name,e.origin_lost?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Alarm Origin Lost."}):"",t],0,null,e.name)}))],0)},e.category)}))};t.StationAlertConsoleContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitorContent=t.SupermatterMonitor=void 0;var o=n(0),r=n(1),a=n(2),i=(n(20),n(3)),c=n(5),l=n(7);t.SupermatterMonitor=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:600,height:400,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t);n.act;return n.data.active?(0,o.createComponentVNode)(2,s):(0,o.createComponentVNode)(2,u)};t.SupermatterMonitorContent=d;var u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.supermatters;return(0,o.createComponentVNode)(2,a.Section,{title:"Supermatters Detected",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Refresh",icon:"sync",onClick:function(){return i("refresh")}}),children:(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"49%",grow:t%2,children:(0,o.createComponentVNode)(2,a.Section,{title:e.area_name+" (#"+e.uid+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:[e.integrity," %"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View Details",onClick:function(){return i("set",{set:e.uid})}})})]})})},t)}))})})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,d=n.data,u=d.SM_area,s=d.SM_integrity,m=d.SM_power,p=d.SM_ambienttemp,h=d.SM_ambientpressure,f=d.SM_EPR,C=d.SM_gas_O2,N=d.SM_gas_CO2,b=d.SM_gas_N2,V=d.SM_gas_PH,g=d.SM_gas_N2O;return(0,o.createComponentVNode)(2,a.Section,{title:(0,l.toTitleCase)(u),buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Return to Menu",onClick:function(){return i("clear")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Core Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{animated:!0,value:s,minValue:0,maxValue:100,ranges:{good:[100,100],average:[50,100],bad:[-Infinity,50]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,a.Box,{color:(m>300?"bad":m>150&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" MeV/cm\xb3"},value:m})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.Box,{color:(p>5e3?"bad":p>4e3&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" K"},value:p})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.Box,{color:(h>1e4?"bad":h>5e3&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" kPa"},value:h})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chamber EPR",children:(0,o.createComponentVNode)(2,a.Box,{color:(f>4?"bad":f>1&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)},value:f})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gas Composition",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"O\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:C}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CO\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:N}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"N\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:b}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"PH",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:V}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"N\xb2O",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:g}),"%"]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SignalerContent=t.Signaler=void 0;var o=n(0),r=n(5),a=n(1),i=n(2),c=n(3);t.Signaler=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{width:280,height:132,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data,d=l.code,u=l.frequency,s=l.minFrequency,m=l.maxFrequency;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:1.4,color:"label",children:"Frequency:"}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:s/10,maxValue:m/10,value:u/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onDrag:function(e,t){return c("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return c("reset",{reset:"freq"})}})})]}),(0,o.createComponentVNode)(2,i.Grid,{mt:.6,children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:1.4,color:"label",children:"Code:"}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:d,width:"80px",onDrag:function(e,t){return c("code",{code:t})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return c("reset",{reset:"code"})}})})]}),(0,o.createComponentVNode)(2,i.Grid,{mt:.8,children:(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{mb:-.1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return c("signal")}})})})]})};t.SignalerContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.RapidPipeDispenser=t.ICON_BY_CATEGORY_NAME=void 0;var o=n(0),r=n(10),a=n(7),i=n(1),c=n(2),l=n(3),d=["Atmospherics","Disposals"],u={Atmospherics:"wrench",Disposals:"trash-alt","Transit Tubes":"bus",Pipes:"grip-lines","Disposal Pipes":"grip-lines",Devices:"microchip","Heat Exchange":"thermometer-half","Insulated pipes":"snowflake","Station Equipment":"microchip"};t.ICON_BY_CATEGORY_NAME=u;var s=[{name:"Dispense",bitmask:1},{name:"Connect",bitmask:2},{name:"Destroy",bitmask:4},{name:"Paint",bitmask:8}];t.RapidPipeDispenser=function(e,t){var n=(0,i.useBackend)(t),m=n.act,p=n.data,h=p.category,f=p.categories,C=void 0===f?[]:f,N=p.selected_color,b=p.paint_colors,V=p.piping_layer,g=p.pipe_layers,v=p.mode,k=p.preview_rows.flatMap((function(e){return e.previews})),y=(0,i.useLocalState)(t,"categoryName"),_=y[0],L=y[1],B=C.find((function(e){return e.cat_name===_}))||C[0];return(0,o.createComponentVNode)(2,l.Window,{width:425,height:515,resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Category",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.Button,{selected:h===t,icon:u[e],color:"transparent",content:e,onClick:function(){return m("category",{category:t})}},e)}))}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Modes",children:s.map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:v&e.bitmask,content:e.name,onClick:function(){return m("mode",{mode:e.bitmask})}},e.bitmask)}))}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Color",children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,width:"64px",color:b[N],children:(0,a.capitalize)(N)}),Object.keys(b).map((function(e){return(0,o.createComponentVNode)(2,c.ColorBox,{ml:1,color:b[e],onClick:function(){return m("color",{paint_color:e})}},e)}))]})]})}),(0,o.createComponentVNode)(2,c.Flex,{m:-.5,children:[(0,o.createComponentVNode)(2,c.Flex.Item,{m:.5,children:(0,o.createComponentVNode)(2,c.Section,{children:[0===h&&(0,o.createComponentVNode)(2,c.Box,{mb:1,children:Object.keys(g).map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{fluid:!0,checked:g[e]===V,content:e,onClick:function(){return m("piping_layer",{piping_layer:g[e]})}},e)}))}),(0,o.createComponentVNode)(2,c.Box,{width:"108px",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{title:e.dir_name,selected:e.selected,style:{width:"48px",height:"48px",padding:0},onClick:function(){return m("setdir",{dir:e.dir,flipped:e.flipped})},children:(0,o.createComponentVNode)(2,c.Box,{className:(0,r.classes)(["pipes32x32",e.dir+"-"+e.icon_state]),style:{transform:"scale(1.5) translate(17%, 17%)"}})},e.dir)}))})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{m:.5,grow:1,children:(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Tabs,{children:C.map((function(e,t){return(0,o.createComponentVNode)(2,c.Tabs.Tab,{fluid:!0,icon:u[e.cat_name],selected:e.cat_name===B.cat_name,onClick:function(){return L(e.cat_name)},children:e.cat_name},e.cat_name)}))}),null==B?void 0:B.recipes.map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{fluid:!0,ellipsis:!0,checked:e.selected,content:e.pipe_name,title:e.pipe_name,onClick:function(){return m("pipe_type",{pipe_type:e.pipe_index,category:B.cat_name})}},e.pipe_index)}))]})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableBasicInfo=void 0;var o=n(0),r=n(1),a=n(2);t.PortableBasicInfo=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.connected,d=c.holding,u=c.on,s=c.pressure,m=c.powerDraw,p=c.cellCharge,h=c.cellMaxCharge;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return i("power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:l?"good":"average",children:l?"Connected":"Not Connected"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Load",children:[m," W"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p,minValue:0,maxValue:h,ranges:{good:[.5*h,Infinity],average:[.25*h,.5*h],bad:[-Infinity,.25*h]},children:[p," W"]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",minHeight:"82px",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!d,onClick:function(){return i("eject")}}),children:d?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:d.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d.pressure})," kPa"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No holding tank"})})],4)}},function(e,t,n){e.exports=n(204)},function(e,t,n){"use strict";n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(226),n(227),n(228),n(230),n(232),n(233),n(234),n(150),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(251),n(252),n(253),n(254),n(255),n(257),n(258),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(289),n(290),n(291),n(292),n(293),n(294),n(296),n(297),n(299),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(325),n(326),n(327),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(167),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417);var o=n(0);n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434);var r=n(172),a=(n(173),n(1)),i=n(174),c=n(24),l=n(176);
+ */t.vecAdd=function(){for(var e=arguments.length,t=new Array(e),n=0;n35;return(0,o.createVNode)(1,"div",(0,r.classes)(["Tooltip",c&&"Tooltip--long",a&&"Tooltip--"+a,i&&"Tooltip--scale--"+Math.floor(i)]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(0),r=n(10),a=n(19);t.Dimmer=function(e){var t=e.className,n=e.children,i=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Dimmer"].concat(t))},i,{children:(0,o.createVNode)(1,"div","Dimmer__inner",n,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var o=n(0),r=n(10);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,o.createVNode)(1,"div",(0,r.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var o=n(0),r=n(10),a=n(19);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.className,n=e.direction,o=e.wrap,a=e.align,c=e.alignContent,l=e.justify,d=e.inline,u=e.spacing,s=void 0===u?0:u,m=e.spacingPrecise,p=void 0===m?0:m,h=i(e,["className","direction","wrap","align","alignContent","justify","inline","spacing","spacingPrecise"]);return Object.assign({className:(0,r.classes)(["Flex",Byond.IS_LTE_IE10&&("column"===n?"Flex--iefix--column":"Flex--iefix"),d&&"Flex--inline",s>0&&"Flex--spacing--"+s,p>0&&"Flex--spacingPrecise--"+p,t]),style:Object.assign({},h.style,{"flex-direction":n,"flex-wrap":o,"align-items":a,"align-content":c,"justify-content":l})},h)};t.computeFlexProps=c;var l=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},c(e))))};t.Flex=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.className,n=e.grow,o=e.order,c=e.shrink,l=e.basis,d=void 0===l?e.width:l,u=e.align,s=i(e,["className","grow","order","shrink","basis","align"]);return Object.assign({className:(0,r.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",t]),style:Object.assign({},s.style,{"flex-grow":n,"flex-shrink":c,"flex-basis":(0,a.unit)(d),order:o,"align-self":u})},s)};t.computeFlexItemProps=d;var u=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},d(e))))};t.FlexItem=u,u.defaultHooks=r.pureComponentHooks,l.Item=u},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(0),r=n(10),a=n(19);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.className,n=e.collapsing,c=e.children,l=i(e,["className","collapsing","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"table",(0,r.classes)(["Table",n&&"Table--collapsing",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Table=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.header,c=i(e,["className","header"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"tr",(0,r.classes)(["Table__row",n&&"Table__row--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(c))))};t.TableRow=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.className,n=e.collapsing,c=e.header,l=i(e,["className","collapsing","header"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"td",(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t,(0,a.computeBoxClassName)(e)]),null,1,Object.assign({},(0,a.computeBoxProps)(l))))};t.TableCell=d,d.defaultHooks=r.pureComponentHooks,c.Row=l,c.Cell=d},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var o=n(0),r=n(10),a=n(19),i=n(180),c=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.color,d=e.textAlign,u=e.verticalAlign,s=e.buttons,m=e.content,p=e.children;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,verticalAlign:u,className:(0,r.classes)(["LabeledList__cell","LabeledList__label"]),children:n?n+":":null}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:l,textAlign:d,verticalAlign:u,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:s?undefined:2,children:[m,p]}),s&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",s,0)],0)};t.LabeledListItem=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.size?(0,a.unit)(Math.max(0,e.size-1)):0;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,i.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};t.LabeledListDivider=d,d.defaultHooks=r.pureComponentHooks,c.Item=l,c.Divider=d},function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var o=n(0),r=n(10),a=n(7),i=n(1),c=n(2),l=n(28),d=n(125),u=n(174),s=n(24),m=n(176),p=n(126);var h=(0,s.createLogger)("Window"),f=[400,600],C=function(e){var t,n;function c(){return e.apply(this,arguments)||this}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=c.prototype;return s.componentDidMount=function(){var e=(0,i.useBackend)(this.context),t=e.config;if(!e.suspended){h.log("mounting");var n=Object.assign({size:f},t.window);this.props.width&&this.props.height&&(n.size=[this.props.width,this.props.height]),(0,u.setWindowKey)(t.window.key),(0,u.recallWindowGeometry)(t.window.key,n),(0,p.refocusLayout)()}},s.render=function(){var e,t=this.props,n=t.resizable,c=t.theme,s=t.title,f=t.children,C=(0,i.useBackend)(this.context),N=C.config,V=C.suspended,g=(0,d.useDebug)(this.context).debugLayout,v=(0,m.useDispatch)(this.context),k=null==(e=N.window)?void 0:e.fancy,y=N.user.observer?N.status=0||(r[n]=e[n]);return r}(e,["className","fitted","scrollable","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,p.Layout.Content,Object.assign({scrollable:a,className:(0,r.classes)(["Window__content",t])},c,{children:n&&i||(0,o.createVNode)(1,"div","Window__contentPadding",i,0)})))};var N=function(e){switch(e){case l.UI_INTERACTIVE:return"good";case l.UI_UPDATE:return"average";case l.UI_DISABLED:default:return"bad"}},b=function(e,t){var n=e.className,i=e.title,l=e.status,d=e.fancy,u=e.onDragStart,s=e.onClose;(0,m.useDispatch)(t);return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",n]),[(0,o.createComponentVNode)(2,c.Icon,{className:"TitleBar__statusIcon",color:N(l),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title","string"==typeof i&&i===i.toLowerCase()&&(0,a.toTitleCase)(i)||i,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return d&&u(e)}}),!1,!!d&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:s})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.InterfaceLockNoticeBox=void 0;var o=n(0),r=n(1),a=n(2);t.InterfaceLockNoticeBox=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.siliconUser,d=void 0===l?c.siliconUser:l,u=e.locked,s=void 0===u?c.locked:u,m=e.normallyLocked,p=void 0===m?c.normallyLocked:m,h=e.onLockStatusChange,f=void 0===h?function(){return i("lock")}:h,C=e.accessText,N=void 0===C?"an ID card":C,b=e.deny,V=void 0!==b&&b,g=e.denialMessage;return V?void 0===g?"Error.":g:d?(0,o.createComponentVNode)(2,a.NoticeBox,{color:d&&"grey",children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:"Interface lock status:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1"}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{m:"0",color:p?"red":"green",icon:p?"lock":"unlock",content:p?"Locked":"Unlocked",onClick:function(){f&&f(!s)}})})]})}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe ",N," ","to ",s?"unlock":"lock"," this interface."]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControlContent=t.AtmosControl=void 0;var o=n(0),r=n(8),a=n(3),i=n(2),c=n(1);(0,n(24).createLogger)("fuck");t.AtmosControl=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{width:600,height:440,resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n,a=(0,c.useBackend)(t),l=a.act,d=a.data,u=a.config,s=(0,r.sortBy)((function(e){return e.name}))(d.alarms||[]),m=(0,c.useLocalState)(t,"tabIndex",0),p=m[0],h=m[1],f=(0,c.useLocalState)(t,"zoom",1),C=f[0],N=f[1];return 0===p?n=(0,o.createComponentVNode)(2,i.Section,{title:"Alarms",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,color:2===e.danger?"bad":1===e.danger?"average":"",onClick:function(){return l("alarm",{alarm:e.ref})}},e.name)}))}):1===p&&(n=(0,o.createComponentVNode)(2,i.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,i.NanoMap,{onZoom:function(e){return N(e)},children:s.filter((function(e){return~~e.z==~~u.mapZLevel})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:C,icon:"bell",tooltip:e.name,color:e.danger?"red":"green",onClick:function(){return l("alarm",{alarm:e.ref})}},e.ref)}))})})),(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===p,onClick:function(){return h(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Alarm View"]},"AlarmView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===p,onClick:function(){return h(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:n})],4)};t.AtmosControlContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.CameraConsoleSearch=t.CameraConsoleContent=t.CameraConsole=void 0;var o=n(0),r=n(8),a=n(44),i=n(10),c=n(7),l=n(1),d=n(2),u=n(3),s=function(e,t,n){void 0===t&&(t=""),void 0===n&&(n="");var o=(0,c.createSearch)(t,(function(e){return e.name}));return(0,a.flow)([(0,r.filter)((function(e){return null==e?void 0:e.name})),t&&(0,r.filter)(o),n&&(0,r.filter)((function(e){return e.networks.includes(n)})),(0,r.sortBy)((function(e){return e.name}))])(e)};t.CameraConsole=function(e,t){return(0,o.createComponentVNode)(2,u.Window,{width:870,height:708,resizable:!0,children:(0,o.createComponentVNode)(2,m)})};var m=function(e,t){var n=(0,l.useBackend)(t),r=n.act,a=n.data,i=(n.config,a.mapRef),c=a.activeCamera,m=function(e,t){var n,o;if(!t)return[];var r=e.findIndex((function(e){return e.name===t.name}));return[null==(n=e[r-1])?void 0:n.name,null==(o=e[r+1])?void 0:o.name]}(s(a.cameras),c);m[0],m[1];return(0,o.createFragment)([(0,o.createVNode)(1,"div","CameraConsole__left",(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,p)}),2),(0,o.createVNode)(1,"div","CameraConsole__right",[(0,o.createVNode)(1,"div","CameraConsole__toolbar",[(0,o.createVNode)(1,"b",null,"Camera: ",16),c&&c.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-left",onClick:function(){return r("pan",{dir:8})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-up",onClick:function(){return r("pan",{dir:1})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-right",onClick:function(){return r("pan",{dir:4})}}),(0,o.createComponentVNode)(2,d.Button,{icon:"chevron-down",onClick:function(){return r("pan",{dir:2})}})],4),(0,o.createComponentVNode)(2,d.ByondUi,{className:"CameraConsole__map",params:{id:i,type:"map"}})],4)],4)};t.CameraConsoleContent=m;var p=function(e,t){var n=(0,l.useBackend)(t),r=n.act,a=n.data,c=(0,l.useLocalState)(t,"searchText",""),m=c[0],p=c[1],h=(0,l.useLocalState)(t,"networkFilter",""),f=h[0],C=h[1],N=a.activeCamera,b=a.allNetworks;b.sort();var V=s(a.cameras,m,f);return(0,o.createFragment)([(0,o.createComponentVNode)(2,d.Input,{fluid:!0,mb:1,placeholder:"Search for a camera",onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,d.Dropdown,{mb:1,width:"177px",options:b,placeholder:"No Filter",onSelected:function(e){return C(e)}}),(0,o.createComponentVNode)(2,d.Section,{children:V.map((function(e){return(0,o.createVNode)(1,"div",(0,i.classes)(["Button","Button--fluid","Button--color--transparent","Button--ellipsis",N&&e.name===N.name&&"Button--selected"]),e.name,0,{title:e.name,onClick:function(){(0,u.refocusLayout)(),r("switch_camera",{name:e.name})}},e.name)}))})],4)};t.CameraConsoleSearch=p},function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(0),r=n(2),a=n(493),i=function(e){var t=e.beakerLoaded,n=e.beakerContents,a=void 0===n?[]:n,i=e.buttons;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===a.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),a.map((function(e,t){return(0,o.createComponentVNode)(2,r.Box,{width:"100%",children:[(0,o.createComponentVNode)(2,r.Box,{color:"label",display:"inline",verticalAlign:"middle",children:[(n=e.volume,n+" unit"+(1===n?"":"s"))," of ",e.name]}),!!i&&(0,o.createComponentVNode)(2,r.Box,{float:"right",display:"inline",children:i(e,t)}),(0,o.createComponentVNode)(2,r.Box,{clear:"both"})]},e.name);var n}))]})};t.BeakerContents=i,i.propTypes={beakerLoaded:a.bool,beakerContents:a.array,buttons:a.arrayOf(a.element)}},function(e,t,n){"use strict";t.__esModule=!0,t.CommunicationsConsoleContent=t.CommunicationsConsole=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.CommunicationsConsole=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:400,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.menu_state),c=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["ERRROR. Unknown menu_state: ",i,"Please report this to NT Technical Support."]});return 1===i?c=(0,o.createComponentVNode)(2,l):2===i?c=(0,o.createComponentVNode)(2,s):3===i&&(c=(0,o.createComponentVNode)(2,u)),(0,o.createFragment)([(0,o.createComponentVNode)(2,d),c],0)};t.CommunicationsConsoleContent=c;var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.messages,d=c.msg_cooldown,u=c.emagged,s=c.cc_cooldown,m=c.str_security_level,p=c.levels,h=c.authmax,f=c.security_level,C=c.security_level_color,N=c.authenticated,b=c.atcsquelch,V=c.boss_short,g="View ("+l.length+")",v="Make Priority Announcement";d>0&&(v+=" ("+d+"s)");var k=u?"Message [UNKNOWN]":"Message "+V;s>0&&(k+=" ("+s+"s)");var y=m,_=p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.name,disabled:!N,selected:e.id===f,onClick:function(){return i("newalertlevel",{level:e.id})}},e.name)}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Site Manager-Only Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",content:v,disabled:!h||d>0,onClick:function(){return i("announce")}})}),!!u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",color:"red",content:k,disabled:!h||s>0,onClick:function(){return i("MessageSyndicate")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!h,onClick:function(){return i("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",content:k,disabled:!h||s>0,onClick:function(){return i("MessageCentCom")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Alert",color:C,children:y}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Change Alert",children:_}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,a.Button,{icon:"tv",content:"Change Status Displays",disabled:!N,onClick:function(){return i("status")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,a.Button,{icon:"folder-open",content:g,disabled:!N,onClick:function(){return i("messagelist")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,a.Button,{icon:"microphone",content:b?"ATC Relay Disabled":"ATC Relay Enabled",disabled:!N,selected:b,onClick:function(){return i("toggleatc")}})})]})})],4)},d=function(e,t){var n,i=(0,r.useBackend)(t),c=i.act,l=i.data,d=l.authenticated,u=l.is_ai,s=l.esc_status,m=l.esc_callable,p=l.esc_recallable;return n=d?u?"AI":1===d?"Command":2===d?"Site Director":"ERROR: Report This Bug!":"Not Logged In",(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access Level",children:"AI"})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{icon:d?"sign-out-alt":"id-card",selected:d,content:d?"Log Out ("+n+")":"Log In",onClick:function(){return c("auth")}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:s}),!!m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rocket",content:"Call Shuttle",disabled:!d,onClick:function(){return c("callshuttle")}})}),!!p&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Recall Shuttle",disabled:!d||u,onClick:function(){return c("cancelshuttle")}})})]})})],4)},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.message_current,d=c.message_deletion_allowed,u=c.authenticated,s=c.messages;if(l)return(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Return To Message List",disabled:!u,onClick:function(){return i("messagelist")}}),children:(0,o.createComponentVNode)(2,a.Box,{children:l.contents})});var m=s.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View",disabled:!u||l&&l.title===e.title,onClick:function(){return i("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete",disabled:!u||!d,onClick:function(){return i("delmessage",{msgid:e.id})}})]},e.id)}));return(0,o.createComponentVNode)(2,a.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return i("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.length&&m||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"404",color:"bad",children:"No messages."})})})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.stat_display,d=c.authenticated,u=l.presets.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.name===l.type,disabled:!d,onClick:function(){return i("setstat",{statdisp:e.name})}},e.name)}));return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return i("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:l.line_1,disabled:!d,onClick:function(){return i("setmsg1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:l.line_2,disabled:!d,onClick:function(){return i("setmsg2")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitorContent=t.CrewMonitor=void 0;var o=n(0),r=n(8),a=n(44),i=n(1),c=n(3),l=n(2),d=function(e){return e.dead?"Deceased":1===parseInt(e.stat,10)?"Unconscious":"Living"},u=function(e){return e.dead?"red":1===parseInt(e.stat,10)?"orange":"green"};t.CrewMonitor=function(){return(0,o.createComponentVNode)(2,c.Window,{width:800,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,s)})})};var s=function(e,t){var n,c=(0,i.useBackend)(t),s=c.act,p=c.data,h=(c.config,(0,i.useLocalState)(t,"tabIndex",0)),f=h[0],C=h[1],N=(0,a.flow)([(0,r.sortBy)((function(e){return e.name})),(0,r.sortBy)((function(e){return null==e?void 0:e.x})),(0,r.sortBy)((function(e){return null==e?void 0:e.y})),(0,r.sortBy)((function(e){return null==e?void 0:e.realZ}))])(p.crewmembers||[]),b=(0,i.useLocalState)(t,"zoom",1);b[0],b[1];return n=0===f?(0,o.createComponentVNode)(2,l.Table,{children:[(0,o.createComponentVNode)(2,l.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Location"})]}),N.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:[(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:u(e),children:d(e)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,l.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"red",children:e.brute}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"orange",children:e.fire}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"green",children:e.tox}),"|",(0,o.createComponentVNode)(2,l.Box,{inline:!0,color:"blue",children:e.oxy}),")"]}):null]}),(0,o.createComponentVNode)(2,l.Table.Cell,{children:3===e.sensor_type?p.isAI?(0,o.createComponentVNode)(2,l.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return s("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+", "+e.z+")":"Not Available"})]},e.ref)}))]}):1===f?(0,o.createComponentVNode)(2,m):"ERROR",(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Tabs,{children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===f,onClick:function(){return C(0)},children:[(0,o.createComponentVNode)(2,l.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===f,onClick:function(){return C(1)},children:[(0,o.createComponentVNode)(2,l.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),(0,o.createComponentVNode)(2,l.Box,{m:2,children:n})],4)};t.CrewMonitorContent=s;var m=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.config),a=n.data,c=(0,i.useLocalState)(t,"zoom",1),d=c[0],s=c[1];return(0,o.createComponentVNode)(2,l.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,l.NanoMap,{onZoom:function(e){return s(e)},children:a.crewmembers.filter((function(e){return 3===e.sensor_type&&~~e.realZ==~~r.mapZLevel})).map((function(e){return(0,o.createComponentVNode)(2,l.NanoMap.Marker,{x:e.x,y:e.y,zoom:d,icon:"circle",tooltip:e.name+" ("+e.assignment+")",color:u(e)},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CryoStorageItems=t.CryoStorageCrew=t.CryoStorage=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.CryoStorage=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data),u=d.real_name,s=d.allow_items,m=(0,r.useLocalState)(t,"tab",0),p=m[0],h=m[1];return(0,o.createComponentVNode)(2,i.Window,{width:400,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===p,onClick:function(){return h(0)},children:"Crew"}),!!s&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===p,onClick:function(){return h(1)},children:"Items"})]}),(0,o.createComponentVNode)(2,a.NoticeBox,{info:!0,children:["Welcome, ",u,"."]}),0===p&&(0,o.createComponentVNode)(2,c),!!s&&1===p&&(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.crew);return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Crew",children:i.length&&i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{color:"label",children:e},e)}))||(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"No crew currently stored."})})};t.CryoStorageCrew=c;var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.items;return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hand-rock",onClick:function(){return i("allitems")},children:"Claim All"}),children:c.length&&c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:"hand-rock",onClick:function(){return i("item",{ref:e.ref})},children:e.name},e.ref)}))||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No items stored."})})};t.CryoStorageItems=l},function(e,t,n){"use strict";t.__esModule=!0,t.RankIcon=void 0;var o=n(0),r=n(2),a={"Colony Director":"user-tie","Site Manager":"user-tie",Overseer:"user-tie","Head of Personnel":"briefcase","Crew Resources Officer":"briefcase","Deputy Director":"briefcase","Command Secretary":"user-tie","Head of Security":"user-shield","Security Commander":"user-shield","Chief of Security":"user-shield",Warden:["city","shield-alt"],Detective:"search","Forensic Technician":"search","Security Officer":"user-shield","Junior Officer":"user-shield","Chief Engineer":"toolbox","Atmospheric Technician":"wind","Station Engineer":"toolbox","Maintenance Technician":"wrench","Engine Technician":"toolbox",Electrician:"toolbox","Chief Medical Officer":"user-md",Chemist:"mortar-pestle",Pharmacist:"mortar-pestle","Medical Doctor":"user-md",Surgeon:"user-md","Emergency Physician":"user-md",Nurse:"user-md",Virologist:"disease",Paramedic:"ambulance","Emergency Medical Technician":"ambulance",Psychiatrist:"couch",Psychologist:"couch","Research Director":"user-graduate","Research Supervisor":"user-graduate",Roboticist:"robot","Biomechanical Engineer":["wrench","heartbeat"],"Mechatronic Engineer":"wrench",Scientist:"flask",Xenoarchaeologist:"flask",Anomalist:"flask","Phoron Researcher":"flask","Circuit Designer":"car-battery",Xenobiologist:"meteor",Xenobotanist:["biohazard","seedling"],Quartermaster:"box-open","Supply Chief":"warehouse","Cargo Technician":"box-open","Shaft Miner":"hard-hat","Drill Technician":"hard-hat",Pathfinder:"binoculars",Explorer:"user-astronaut","Field Medic":["user-md","user-astronaut"],Pilot:"space-shuttle",Bartender:"glass-martini",Barista:"coffee",Botanist:"leaf",Gardener:"leaf",Chaplain:"place-of-worship",Counselor:"couch",Chef:"utensils",Cook:"utensils",Entertainer:"smile-beam",Performer:"smile-beam",Musician:"guitar",Stagehand:"smile-beam",Intern:"school","Apprentice Engineer":["school","wrench"],"Medical Intern":["school","user-md"],"Lab Assistant":["school","flask"],"Security Cadet":["school","shield-alt"],"Jr. Cargo Tech":["school","box"],"Jr. Explorer":["school","user-astronaut"],Server:["school","utensils"],"Internal Affairs Agent":"balance-scale",Janitor:"broom",Custodian:"broom","Sanitation Technician":"hand-sparkles",Maid:"broom",Librarian:"book",Journalist:"newspaper",Writer:"book",Historian:"chalkboard-teacher",Professor:"chalkboard-teacher",Visitor:"user","Emergency Responder":"fighter-jet"};t.RankIcon=function(e,t){var n=e.rank,i=e.color,c=void 0===i?"label":i,l=a[n];return"string"==typeof l?(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:l,size:2}):Array.isArray(l)?l.map((function(e){return(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:e,size:2},e)})):(0,o.createComponentVNode)(2,r.Icon,{inline:!0,color:c,name:"user",size:2})}},function(e,t,n){"use strict";t.__esModule=!0,t.MiningUser=void 0;var o=n(0),r=n(1),a=n(2);t.MiningUser=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.insertIdText,d=c.has_id,u=c.id;return(0,o.createComponentVNode)(2,a.NoticeBox,{success:d,children:d?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",u.name,".",(0,o.createVNode)(1,"br"),"You have ",u.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return i("logoff")}}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})],4):l})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosEmailClientViewMessage=t.NtosEmailClient=void 0;var o=n(0),r=n(1),a=n(2),i=n(3),c=n(5);t.NtosEmailClient=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.PC_device_theme,u=a.error,s=a.downloading,m=a.current_account,p=(0,o.createComponentVNode)(2,f);return u?p=(0,o.createComponentVNode)(2,h,{error:u}):s?p=(0,o.createComponentVNode)(2,l):m&&(p=(0,o.createComponentVNode)(2,d)),(0,o.createComponentVNode)(2,i.NtosWindow,{resizable:!0,theme:c,children:(0,o.createComponentVNode)(2,i.NtosWindow.Content,{scrollable:!0,children:p})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data),l=i.down_filename,d=i.down_progress,u=i.down_size,s=i.down_speed;return(0,o.createComponentVNode)(2,a.Section,{title:"Downloading...",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"File",children:[l," (",u," GQ)"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Speed",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," GQ/s"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Progress",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:d,maxValue:u,children:[d,"/",u," (",(0,c.round)(d/u*100,1),"%)"]})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.current_account,d=c.addressbook,h=c.new_message,f=c.cur_title,C=(0,o.createComponentVNode)(2,u);return d?C=(0,o.createComponentVNode)(2,m):h?C=(0,o.createComponentVNode)(2,p):f&&(C=(0,o.createComponentVNode)(2,s)),(0,o.createComponentVNode)(2,a.Section,{title:"Logged in as: "+l,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"plus",tooltip:"New Message",tooltipPosition:"left",onClick:function(){return i("new_message")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cogs",tooltip:"Change Password",tooltipPosition:"left",onClick:function(){return i("changepassword")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",tooltip:"Log Out",tooltipPosition:"left",onClick:function(){return i("logout")}})],4),children:C})},u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(c.current_account,c.folder),d=c.messagecount,u=c.messages;return(0,o.createComponentVNode)(2,a.Section,{level:2,noTopPadding:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Inbox"===l,onClick:function(){return i("set_folder",{set_folder:"Inbox"})},children:"Inbox"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Spam"===l,onClick:function(){return i("set_folder",{set_folder:"Spam"})},children:"Spam"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:"Deleted"===l,onClick:function(){return i("set_folder",{set_folder:"Deleted"})},children:"Deleted"})]}),d&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Source"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Title"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Received At"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Actions"})]}),u.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.source}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",onClick:function(){return i("view",{view:e.uid})},tooltip:"View"}),(0,o.createComponentVNode)(2,a.Button,{icon:"share",onClick:function(){return i("reply",{reply:e.uid})},tooltip:"Reply"}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",onClick:function(){return i("delete",{"delete":e.uid})},tooltip:"Delete"})]})]},e.timestamp+e.title)}))]})})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["No emails found in ",l,"."]})]})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=e.administrator,d=c.cur_title,u=c.cur_source,s=c.cur_timestamp,m=c.cur_body,p=c.cur_hasattachment,h=c.cur_attachment_filename,f=c.cur_attachment_size,C=c.cur_uid;return(0,o.createComponentVNode)(2,a.Section,{title:d,buttons:l?(0,o.createComponentVNode)(2,a.Button,{icon:"times",onClick:function(){return i("back")}}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"share",tooltip:"Reply",tooltipPosition:"left",onClick:function(){return i("reply",{reply:C})}}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"trash",tooltip:"Delete",tooltipPosition:"left",onClick:function(){return i("delete",{"delete":C})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"save",tooltip:"Save To Disk",tooltipPosition:"left",onClick:function(){return i("save",{save:C})}}),p&&(0,o.createComponentVNode)(2,a.Button,{icon:"paperclip",tooltip:"Save Attachment",tooltipPosition:"left",onClick:function(){return i("downloadattachment")}})||null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",tooltip:"Close",tooltipPosition:"left",onClick:function(){return i("cancel",{cancel:C})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"From",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"At",children:s}),p&&!l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",color:"average",children:[h," (",f,"GQ)"]})||null,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createVNode)(1,"div",null,null,1,{dangerouslySetInnerHTML:{__html:m}})})})]})})};t.NtosEmailClientViewMessage=s;var m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.accounts;return(0,o.createComponentVNode)(2,a.Section,{title:"Address Book",level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("set_recipient",{set_recipient:null})}}),children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.login,fluid:!0,onClick:function(){return i("set_recipient",{set_recipient:e.login})}},e.login)}))})},p=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=(c.current_account,c.msg_title),d=c.msg_recipient,u=c.msg_body,s=c.msg_hasattachment,m=c.msg_attachment_filename,p=c.msg_attachment_size;return(0,o.createComponentVNode)(2,a.Section,{title:"New Message",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"share",onClick:function(){return i("send")},children:"Send Message"}),(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("cancel")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:l,onInput:function(e,t){return i("edit_title",{val:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Recipient",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:d,onInput:function(e,t){return i("edit_recipient",{val:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"address-book",onClick:function(){return i("addressbook")},tooltip:"Find Receipients",tooltipPosition:"left"})})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachments",buttons:s&&(0,o.createComponentVNode)(2,a.Button,{color:"bad",icon:"times",onClick:function(){return i("remove_attachment")},children:"Remove Attachment"})||(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return i("addattachment")},children:"Add Attachment"}),children:s&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[m," (",p,"GQ)"]})||null}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Section,{width:"99%",inline:!0,children:(0,o.createVNode)(1,"div",null,null,1,{dangerouslySetInnerHTML:{__html:u}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{verticalAlign:"top",onClick:function(){return i("edit_body")},icon:"pen",tooltip:"Edit Message",tooltipPosition:"left"})})]})})]})})},h=function(e,t){var n=(0,r.useBackend)(t).act,i=e.error;return(0,o.createComponentVNode)(2,a.Section,{title:"Notification",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Return",onClick:function(){return n("reset")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:i})})},f=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.stored_login,d=c.stored_password;return(0,o.createComponentVNode)(2,a.Section,{title:"Please Log In",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Email address",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:l,onInput:function(e,t){return i("edit_login",{val:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Password",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:d,onInput:function(e,t){return i("edit_password",{val:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",onClick:function(){return i("login")},children:"Log In"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OvermapNavigationContent=t.OvermapNavigation=void 0;var o=n(0),r=(n(5),n(1)),a=n(2),i=n(3),c=n(134);t.OvermapNavigation=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:380,height:530,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.sector,u=l.s_x,s=l.s_y,m=l.sector_info,p=l.viewing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Current Location",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:p,onClick:function(){return i("viewing")},children:"Map View"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Location",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Coordiantes",children:[u," : ",s]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Additional Information",children:m})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Flight Data",children:(0,o.createComponentVNode)(2,c.OvermapFlightData,{disableLimiterControls:!0})})],4)};t.OvermapNavigationContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.RCONContent=t.RCON=void 0;var o=n(0),r=n(5),a=n(1),i=n(2),c=n(3);t.RCON=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{width:630,height:440,resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n,r=(0,a.useLocalState)(t,"tabIndex",0),c=r[0],l=r[1];return 0===c?n=(0,o.createComponentVNode)(2,d):1===c&&(n=(0,o.createComponentVNode)(2,u)),(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===c,onClick:function(){return l(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"power-off"})," SMESs"]},"SMESs"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===c,onClick:function(){return l(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"bolt"})," Breakers"]},"Breakers")]}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:n})],4)};t.RCONContent=l;var d=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data.smes_info;return(0,o.createComponentVNode)(2,i.Section,{title:"SMESs",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:l?l.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.RCON_tag,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:.01*e.capacityPercent,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]},children:[(0,r.round)(e.charge/6e4,1)," kWh / ",(0,r.round)(e.capacity/6e4)," kWh (",e.capacityPercent,"%)"]})}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",onClick:function(){return c("smes_in_toggle",{smes:e.RCON_tag})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return c("smes_in_set",{smes:e.RCON_tag})}})],4),children:[e.input_val," kW - ",e.input_set?"ON":"OFF"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",onClick:function(){return c("smes_out_toggle",{smes:e.RCON_tag})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return c("smes_out_set",{smes:e.RCON_tag})}})],4),children:[e.output_val," kW - ",e.output_set?"ONLINE":"OFFLINE"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output Load",children:[e.output_load," kW"]})]})]},e.RCON_tag)})):(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"bad",children:"No SMESs detected."})})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data.breaker_info;return(0,o.createComponentVNode)(2,i.Section,{title:"Breakers",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:c?c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.RCON_tag,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.enabled?"Enabled":"Disabled",selected:e.enabled,color:e.enabled?null:"bad",onClick:function(){return r("toggle_breaker",{breaker:e.RCON_tag})}})},e.RCON_tag)})):(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"bad",children:"No breakers detected."})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShutoffMonitorContent=t.ShutoffMonitor=void 0;var o=n(0),r=n(1),a=n(3),i=n(2);t.ShutoffMonitor=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{width:627,height:700,resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.valves;return(0,o.createComponentVNode)(2,i.Section,{title:"Valves",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Position"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Open"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Mode"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Actions"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[e.x,", ",e.y,", ",e.z]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.open?"Yes":"No"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.enabled?"Auto":"Manual"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.open?"Opened":"Closed",selected:e.open,disabled:!e.enabled,onClick:function(){return a("toggle_open",{valve:e.ref})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:e.enabled?"Auto":"Manual",selected:e.enabled,onClick:function(){return a("toggle_enable",{valve:e.ref})}})]})]},e.name)}))]})})};t.ShutoffMonitorContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),i=n(3);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,i.Window,{width:425,height:600,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.categories;return(void 0===c?[]:c).map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.category,children:(0,o.createVNode)(1,"ul",null,[0===e.alarms.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),e.alarms.map((function(e){var t="";return e.has_cameras?t=(0,o.createComponentVNode)(2,a.Section,{children:e.cameras.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{disabled:e.deact,content:e.name+(e.deact?" (deactived)":""),icon:"video",onClick:function(){return i("switchTo",{camera:e.camera})}},e.name)}))}):e.lost_sources&&(t=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Lost Alarm Sources: ",e.lost_sources]})),(0,o.createVNode)(1,"li",null,[e.name,e.origin_lost?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Alarm Origin Lost."}):"",t],0,null,e.name)}))],0)},e.category)}))};t.StationAlertConsoleContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitorContent=t.SupermatterMonitor=void 0;var o=n(0),r=n(1),a=n(2),i=(n(20),n(3)),c=n(5),l=n(7);t.SupermatterMonitor=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{width:600,height:400,resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t);n.act;return n.data.active?(0,o.createComponentVNode)(2,s):(0,o.createComponentVNode)(2,u)};t.SupermatterMonitorContent=d;var u=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.supermatters;return(0,o.createComponentVNode)(2,a.Section,{title:"Supermatters Detected",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Refresh",icon:"sync",onClick:function(){return i("refresh")}}),children:(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"49%",grow:t%2,children:(0,o.createComponentVNode)(2,a.Section,{title:e.area_name+" (#"+e.uid+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:[e.integrity," %"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View Details",onClick:function(){return i("set",{set:e.uid})}})})]})})},t)}))})})},s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,d=n.data,u=d.SM_area,s=d.SM_integrity,m=d.SM_power,p=d.SM_ambienttemp,h=d.SM_ambientpressure,f=d.SM_EPR,C=d.SM_gas_O2,N=d.SM_gas_CO2,b=d.SM_gas_N2,V=d.SM_gas_PH,g=d.SM_gas_N2O;return(0,o.createComponentVNode)(2,a.Section,{title:(0,l.toTitleCase)(u),buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Return to Menu",onClick:function(){return i("clear")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Core Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{animated:!0,value:s,minValue:0,maxValue:100,ranges:{good:[100,100],average:[50,100],bad:[-Infinity,50]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,a.Box,{color:(m>300?"bad":m>150&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" MeV/cm\xb3"},value:m})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.Box,{color:(p>5e3?"bad":p>4e3&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" K"},value:p})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.Box,{color:(h>1e4?"bad":h>5e3&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)+" kPa"},value:h})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chamber EPR",children:(0,o.createComponentVNode)(2,a.Box,{color:(f>4?"bad":f>1&&"average")||"good",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{format:function(e){return(0,c.round)(e,2)},value:f})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gas Composition",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"O\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:C}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CO\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:N}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"N\xb2",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:b}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"PH",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:V}),"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"N\xb2O",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:g}),"%"]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SignalerContent=t.Signaler=void 0;var o=n(0),r=n(5),a=n(1),i=n(2),c=n(3);t.Signaler=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{width:280,height:132,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,l)})})};var l=function(e,t){var n=(0,a.useBackend)(t),c=n.act,l=n.data,d=l.code,u=l.frequency,s=l.minFrequency,m=l.maxFrequency;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:1.4,color:"label",children:"Frequency:"}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:s/10,maxValue:m/10,value:u/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onDrag:function(e,t){return c("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return c("reset",{reset:"freq"})}})})]}),(0,o.createComponentVNode)(2,i.Grid,{mt:.6,children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:1.4,color:"label",children:"Code:"}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:d,width:"80px",onDrag:function(e,t){return c("code",{code:t})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return c("reset",{reset:"code"})}})})]}),(0,o.createComponentVNode)(2,i.Grid,{mt:.8,children:(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{mb:-.1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return c("signal")}})})})]})};t.SignalerContent=l},function(e,t,n){"use strict";t.__esModule=!0,t.RapidPipeDispenser=t.ICON_BY_CATEGORY_NAME=void 0;var o=n(0),r=n(10),a=n(7),i=n(1),c=n(2),l=n(3),d=["Atmospherics","Disposals"],u={Atmospherics:"wrench",Disposals:"trash-alt","Transit Tubes":"bus",Pipes:"grip-lines","Disposal Pipes":"grip-lines",Devices:"microchip","Heat Exchange":"thermometer-half","Insulated pipes":"snowflake","Station Equipment":"microchip"};t.ICON_BY_CATEGORY_NAME=u;var s=[{name:"Dispense",bitmask:1},{name:"Connect",bitmask:2},{name:"Destroy",bitmask:4},{name:"Paint",bitmask:8}];t.RapidPipeDispenser=function(e,t){var n=(0,i.useBackend)(t),m=n.act,p=n.data,h=p.category,f=p.categories,C=void 0===f?[]:f,N=p.selected_color,b=p.paint_colors,V=p.piping_layer,g=p.pipe_layers,v=p.mode,k=p.preview_rows.flatMap((function(e){return e.previews})),y=(0,i.useLocalState)(t,"categoryName"),_=y[0],L=y[1],B=C.find((function(e){return e.cat_name===_}))||C[0];return(0,o.createComponentVNode)(2,l.Window,{width:425,height:515,resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Category",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.Button,{selected:h===t,icon:u[e],color:"transparent",content:e,onClick:function(){return m("category",{category:t})}},e)}))}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Modes",children:s.map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{checked:v&e.bitmask,content:e.name,onClick:function(){return m("mode",{mode:e.bitmask})}},e.bitmask)}))}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Color",children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,width:"64px",color:b[N],children:(0,a.capitalize)(N)}),Object.keys(b).map((function(e){return(0,o.createComponentVNode)(2,c.ColorBox,{ml:1,color:b[e],onClick:function(){return m("color",{paint_color:e})}},e)}))]})]})}),(0,o.createComponentVNode)(2,c.Flex,{m:-.5,children:[(0,o.createComponentVNode)(2,c.Flex.Item,{m:.5,children:(0,o.createComponentVNode)(2,c.Section,{children:[0===h&&(0,o.createComponentVNode)(2,c.Box,{mb:1,children:Object.keys(g).map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{fluid:!0,checked:g[e]===V,content:e,onClick:function(){return m("piping_layer",{piping_layer:g[e]})}},e)}))}),(0,o.createComponentVNode)(2,c.Box,{width:"108px",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{title:e.dir_name,selected:e.selected,style:{width:"48px",height:"48px",padding:0},onClick:function(){return m("setdir",{dir:e.dir,flipped:e.flipped})},children:(0,o.createComponentVNode)(2,c.Box,{className:(0,r.classes)(["pipes32x32",e.dir+"-"+e.icon_state]),style:{transform:"scale(1.5) translate(17%, 17%)"}})},e.dir)}))})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{m:.5,grow:1,children:(0,o.createComponentVNode)(2,c.Section,{children:[(0,o.createComponentVNode)(2,c.Tabs,{children:C.map((function(e,t){return(0,o.createComponentVNode)(2,c.Tabs.Tab,{fluid:!0,icon:u[e.cat_name],selected:e.cat_name===B.cat_name,onClick:function(){return L(e.cat_name)},children:e.cat_name},e.cat_name)}))}),null==B?void 0:B.recipes.map((function(e){return(0,o.createComponentVNode)(2,c.Button.Checkbox,{fluid:!0,ellipsis:!0,checked:e.selected,content:e.pipe_name,title:e.pipe_name,onClick:function(){return m("pipe_type",{pipe_type:e.pipe_index,category:B.cat_name})}},e.pipe_index)}))]})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableBasicInfo=void 0;var o=n(0),r=n(1),a=n(2);t.PortableBasicInfo=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.connected,d=c.holding,u=c.on,s=c.pressure,m=c.powerDraw,p=c.cellCharge,h=c.cellMaxCharge;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return i("power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:l?"good":"average",children:l?"Connected":"Not Connected"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Load",children:[m," W"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p,minValue:0,maxValue:h,ranges:{good:[.5*h,Infinity],average:[.25*h,.5*h],bad:[-Infinity,.25*h]},children:[p," W"]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",minHeight:"82px",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!d,onClick:function(){return i("eject")}}),children:d?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:d.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d.pressure})," kPa"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No holding tank"})})],4)}},function(e,t,n){e.exports=n(204)},function(e,t,n){"use strict";n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(226),n(227),n(228),n(230),n(232),n(233),n(234),n(150),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(251),n(252),n(253),n(254),n(255),n(257),n(258),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(289),n(290),n(291),n(292),n(293),n(294),n(296),n(297),n(299),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(325),n(326),n(327),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(167),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417);var o=n(0);n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434);var r=n(172),a=(n(173),n(1)),i=n(174),c=n(24),l=n(176);
/**
* @file
* @copyright 2020 Aleksej Komarov
diff --git a/vorestation.dme b/vorestation.dme
index 0a608dcb87..31d0ea3395 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -78,6 +78,7 @@
#include "code\__defines\qdel.dm"
#include "code\__defines\research.dm"
#include "code\__defines\roguemining_vr.dm"
+#include "code\__defines\rust_g.dm"
#include "code\__defines\shields.dm"
#include "code\__defines\shuttle.dm"
#include "code\__defines\sound.dm"
@@ -101,6 +102,9 @@
#include "code\__defines\wires.dm"
#include "code\__defines\xenoarcheaology.dm"
#include "code\__defines\ZAS.dm"
+#include "code\__defines\dcs\flags.dm"
+#include "code\__defines\dcs\helpers.dm"
+#include "code\__defines\dcs\signals.dm"
#include "code\_compatibility\509\_JSON.dm"
#include "code\_compatibility\509\JSON Reader.dm"
#include "code\_compatibility\509\JSON Writer.dm"
@@ -155,7 +159,6 @@
#include "code\_onclick\drag_drop.dm"
#include "code\_onclick\item_attack.dm"
#include "code\_onclick\observer.dm"
-#include "code\_onclick\observer_vr.dm"
#include "code\_onclick\other_mobs.dm"
#include "code\_onclick\rig.dm"
#include "code\_onclick\telekinesis.dm"
@@ -259,6 +262,7 @@
#include "code\controllers\subsystems\character_setup.dm"
#include "code\controllers\subsystems\chat.dm"
#include "code\controllers\subsystems\circuits.dm"
+#include "code\controllers\subsystems\dcs.dm"
#include "code\controllers\subsystems\discord.dm"
#include "code\controllers\subsystems\events.dm"
#include "code\controllers\subsystems\garbage.dm"
@@ -340,6 +344,9 @@
#include "code\datums\autolathe\medical_vr.dm"
#include "code\datums\autolathe\tools.dm"
#include "code\datums\autolathe\tools_vr.dm"
+#include "code\datums\components\_component.dm"
+#include "code\datums\elements\_element.dm"
+#include "code\datums\game_masters\_common.dm"
#include "code\datums\helper_datums\construction_datum.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
@@ -1283,6 +1290,7 @@
#include "code\game\objects\items\weapons\shields_vr.dm"
#include "code\game\objects\items\weapons\stunbaton.dm"
#include "code\game\objects\items\weapons\surgery_tools.dm"
+#include "code\game\objects\items\weapons\surgery_tools_ch.dm"
#include "code\game\objects\items\weapons\swords_axes_etc.dm"
#include "code\game\objects\items\weapons\syndie.dm"
#include "code\game\objects\items\weapons\tape.dm"
@@ -1693,6 +1701,7 @@
#include "code\modules\admin\secrets\random_events\gravity_vr.dm"
#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm"
#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm"
+#include "code\modules\admin\verbs\admin_ch.dm"
#include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminhelp_vr.dm"
#include "code\modules\admin\verbs\adminjump.dm"
@@ -2607,7 +2616,6 @@
#include "code\modules\mob\living\inventory.dm"
#include "code\modules\mob\living\life.dm"
#include "code\modules\mob\living\living.dm"
-#include "code\modules\mob\living\living_ch.dm"
#include "code\modules\mob\living\living_defense.dm"
#include "code\modules\mob\living\living_defines.dm"
#include "code\modules\mob\living\living_defines_vr.dm"
@@ -2686,7 +2694,6 @@
#include "code\modules\mob\living\carbon\human\human_helpers.dm"
#include "code\modules\mob\living\carbon\human\human_helpers_vr.dm"
#include "code\modules\mob\living\carbon\human\human_movement.dm"
-#include "code\modules\mob\living\carbon\human\human_movement_ch.dm"
#include "code\modules\mob\living\carbon\human\human_organs.dm"
#include "code\modules\mob\living\carbon\human\human_powers.dm"
#include "code\modules\mob\living\carbon\human\human_powers_vr.dm"
@@ -2715,6 +2722,7 @@
#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"
+#include "code\modules\mob\living\carbon\human\species\species_ch.dm"
#include "code\modules\mob\living\carbon\human\species\species_getters.dm"
#include "code\modules\mob\living\carbon\human\species\species_getters_vr.dm"
#include "code\modules\mob\living\carbon\human\species\species_helpers.dm"
@@ -2752,10 +2760,13 @@
#include "code\modules\mob\living\carbon\human\species\station\protean_vr\protean_powers.dm"
#include "code\modules\mob\living\carbon\human\species\station\protean_vr\protean_species.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\negative.dm"
+#include "code\modules\mob\living\carbon\human\species\station\traits_vr\negative_ch.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\neutral.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\neutral_ch.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\positive.dm"
+#include "code\modules\mob\living\carbon\human\species\station\traits_vr\positive_ch.dm"
#include "code\modules\mob\living\carbon\human\species\station\traits_vr\trait.dm"
+#include "code\modules\mob\living\carbon\human\species\station\traits_vr\trait_ch.dm"
#include "code\modules\mob\living\carbon\human\species\virtual_reality\avatar.dm"
#include "code\modules\mob\living\carbon\human\species\virtual_reality\opaque_form.dm"
#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm"
@@ -3014,6 +3025,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\hippo.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\vore\lamia.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\lizardman.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\oregrub.dm"
@@ -3051,6 +3063,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\mobs_monsters\clowns\honkelemental.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\mobs_monsters\clowns\regularclowns.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\morph\morph.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\vore\plants_ch\pitcher.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\_defines.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_objects.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_procs.dm"
@@ -3358,6 +3371,7 @@
#include "code\modules\power\fusion\core\core_control.dm"
#include "code\modules\power\fusion\core\core_field.dm"
#include "code\modules\power\fusion\fuel_assembly\fuel_assembly.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_assembly_ch.dm"
#include "code\modules\power\fusion\fuel_assembly\fuel_compressor.dm"
#include "code\modules\power\fusion\fuel_assembly\fuel_control.dm"
#include "code\modules\power\fusion\fuel_assembly\fuel_injector.dm"
@@ -3741,6 +3755,7 @@
#include "code\modules\spells\targeted\projectile\magic_missile.dm"
#include "code\modules\spells\targeted\projectile\projectile.dm"
#include "code\modules\surgery\_defines.dm"
+#include "code\modules\surgery\additions_ch.dm"
#include "code\modules\surgery\bones.dm"
#include "code\modules\surgery\encased.dm"
#include "code\modules\surgery\external_repair.dm"
@@ -3868,7 +3883,6 @@
#include "code\modules\vore\eating\contaminate_vr.dm"
#include "code\modules\vore\eating\digest_act_vr.dm"
#include "code\modules\vore\eating\leave_remains_vr.dm"
-#include "code\modules\vore\eating\living_ch.dm"
#include "code\modules\vore\eating\living_vr.dm"
#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"